To: vim_dev@googlegroups.com Subject: Patch 8.2.4257 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.4257 Problem: Vim9: finding global function without g: prefix but not finding global variable is inconsistent. Solution: Require using g: for a global function. Change the vim9.vim script into a Vim9 script with exports. Fix that import in legacy script does not work. Files: src/vim9expr.c, src/evalfunc.c, src/eval.c, src/userfunc.c, src/testdir/vim9.vim, src/testdir/test_vim9_assign.vim, src/testdir/test_vim9_builtin.vim, src/testdir/test_vim9_cmd.vim, src/testdir/test_vim9_disassemble.vim, src/testdir/test_vim9_expr.vim, src/testdir/test_vim9_func.vim, src/testdir/test_vim9_import.vim, src/testdir/test_vim9_script.vim, src/testdir/test_blob.vim, src/testdir/test_execute_func.vim, src/testdir/test_debugger.vim, src/testdir/test_expr.vim, src/testdir/test_filter_map.vim, src/testdir/test_float_func.vim, src/testdir/test_functions.vim, src/testdir/test_glob2regpat.vim, src/testdir/test_highlight.vim, src/testdir/test_iminsert.vim, src/testdir/test_ins_complete.vim, src/testdir/test_listdict.vim, src/testdir/test_mapping.vim, src/testdir/test_normal.vim, src/testdir/test_popupwin.vim, src/testdir/test_profile.vim, src/testdir/test_quickfix.vim, src/testdir/test_tagfunc.vim, src/testdir/test_textprop.vim, src/testdir/test_usercommands.vim *** ../vim-8.2.4256/src/vim9expr.c 2022-01-25 15:51:52.430855187 +0000 --- src/vim9expr.c 2022-01-29 20:11:29.537458189 +0000 *************** *** 254,265 **** return FAIL; si = SCRIPT_ITEM(current_sctx.sc_sid); idx = get_script_item_idx(current_sctx.sc_sid, name, 0, cctx); - if (idx == -1 || si->sn_version != SCRIPT_VERSION_VIM9) - { - // variable is not in sn_var_vals: old style script. - return generate_OLDSCRIPT(cctx, ISN_LOADS, name, current_sctx.sc_sid, - &t_any); - } if (idx >= 0) { svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data) + idx; --- 254,259 ---- *************** *** 344,349 **** --- 338,348 ---- return OK; } + if (idx == -1 || si->sn_version != SCRIPT_VERSION_VIM9) + // variable is not in sn_var_vals: old style script. + return generate_OLDSCRIPT(cctx, ISN_LOADS, name, current_sctx.sc_sid, + &t_any); + if (error) semsg(_(e_item_not_found_str), name); return FAIL; *************** *** 667,672 **** --- 666,672 ---- ufunc_T *ufunc = NULL; int res = FAIL; int is_autoload; + int has_g_namespace; int is_searchpair; imported_T *import; *************** *** 783,788 **** --- 783,790 ---- goto theend; } + has_g_namespace = STRNCMP(namebuf, "g:", 2) == 0; + // An argument or local variable can be a function reference, this // overrules a function name. if (lookup_local(namebuf, varlen, NULL, cctx) == FAIL *************** *** 791,800 **** // If we can find the function by name generate the right call. // Skip global functions here, a local funcref takes precedence. ufunc = find_func(name, FALSE); ! if (ufunc != NULL && !func_is_global(ufunc)) { ! res = generate_CALL(cctx, ufunc, argcount); ! goto theend; } } --- 793,812 ---- // If we can find the function by name generate the right call. // Skip global functions here, a local funcref takes precedence. ufunc = find_func(name, FALSE); ! if (ufunc != NULL) { ! if (!func_is_global(ufunc)) ! { ! res = generate_CALL(cctx, ufunc, argcount); ! goto theend; ! } ! if (!has_g_namespace ! && vim_strchr(ufunc->uf_name, AUTOLOAD_CHAR) == NULL) ! { ! // A function name without g: prefix must be found locally. ! semsg(_(e_unknown_function_str), namebuf); ! goto theend; ! } } } *************** *** 802,808 **** // Not for g:Func(), we don't know if it is a variable or not. // Not for eome#Func(), it will be loaded later. p = namebuf; ! if (STRNCMP(namebuf, "g:", 2) != 0 && !is_autoload && compile_load(&p, namebuf + varlen, cctx, FALSE, FALSE) == OK) { type_T *type = get_type_on_stack(cctx, 0); --- 814,820 ---- // Not for g:Func(), we don't know if it is a variable or not. // Not for eome#Func(), it will be loaded later. p = namebuf; ! if (!has_g_namespace && !is_autoload && compile_load(&p, namebuf + varlen, cctx, FALSE, FALSE) == OK) { type_T *type = get_type_on_stack(cctx, 0); *************** *** 820,826 **** // A global function may be defined only later. Need to figure out at // runtime. Also handles a FuncRef at runtime. ! if (STRNCMP(namebuf, "g:", 2) == 0 || is_autoload) res = generate_UCALL(cctx, name, argcount); else semsg(_(e_unknown_function_str), namebuf); --- 832,838 ---- // A global function may be defined only later. Need to figure out at // runtime. Also handles a FuncRef at runtime. ! if (has_g_namespace || is_autoload) res = generate_UCALL(cctx, name, argcount); else semsg(_(e_unknown_function_str), namebuf); *** ../vim-8.2.4256/src/evalfunc.c 2022-01-29 15:19:19.542172491 +0000 --- src/evalfunc.c 2022-01-29 18:10:54.955431983 +0000 *************** *** 3830,3843 **** } else if (*p == '*') // internal or user defined function { - int save_version = current_sctx.sc_version; - - // Vim9 script assumes a function is script-local, but here we want to - // find any matching function. - if (current_sctx.sc_version == SCRIPT_VERSION_VIM9) - current_sctx.sc_version = SCRIPT_VERSION_MAX; n = function_exists(p + 1, FALSE); - current_sctx.sc_version = save_version; } else if (*p == '?') // internal function only { --- 3830,3836 ---- *** ../vim-8.2.4256/src/eval.c 2022-01-29 15:19:19.542172491 +0000 --- src/eval.c 2022-01-29 18:52:45.030623276 +0000 *************** *** 963,969 **** if (lp->ll_name == NULL) return p; ! if (*p == '.' && in_vim9script()) { imported_T *import = find_imported(lp->ll_name, p - lp->ll_name, TRUE, NULL); --- 963,969 ---- if (lp->ll_name == NULL) return p; ! if (*p == '.') { imported_T *import = find_imported(lp->ll_name, p - lp->ll_name, TRUE, NULL); *** ../vim-8.2.4256/src/userfunc.c 2022-01-24 13:54:42.298380706 +0000 --- src/userfunc.c 2022-01-29 19:10:22.715821620 +0000 *************** *** 3789,3795 **** sid_buf[1] = KS_EXTRA; sid_buf[2] = (int)KE_SNR; vim_snprintf((char *)sid_buf + 3, sizeof(sid_buf) - 3, ! "%ld_", (long)current_sctx.sc_sid); name = concat_str(sid_buf, lv.ll_name); } *lv.ll_name_end = cc; --- 3789,3795 ---- sid_buf[1] = KS_EXTRA; sid_buf[2] = (int)KE_SNR; vim_snprintf((char *)sid_buf + 3, sizeof(sid_buf) - 3, ! "%ld_", (long)lv.ll_sid); name = concat_str(sid_buf, lv.ll_name); } *lv.ll_name_end = cc; *** ../vim-8.2.4256/src/testdir/vim9.vim 2021-12-22 18:45:25.251852546 +0000 --- src/testdir/vim9.vim 2022-01-29 17:08:40.893258743 +0000 *************** *** 1,10 **** ! " Utility functions for testing vim9 script ! " Use a different file name for each run. ! let s:sequence = 1 ! " Check that "lines" inside a ":def" function has no error when called. ! func CheckDefSuccess(lines) let cwd = getcwd() let fname = 'XdefSuccess' .. s:sequence let s:sequence += 1 --- 1,12 ---- ! vim9script ! # Utility functions for testing vim9 script ! # Use a different file name for each run. ! var sequence = 1 ! ! # Check that "lines" inside a ":def" function has no error when called. ! export func CheckDefSuccess(lines) let cwd = getcwd() let fname = 'XdefSuccess' .. s:sequence let s:sequence += 1 *************** *** 19,26 **** endtry endfunc ! " Check that "lines" inside a ":def" function has no error when compiled. ! func CheckDefCompileSuccess(lines) let fname = 'XdefSuccess' .. s:sequence let s:sequence += 1 call writefile(['def Func()'] + a:lines + ['enddef', 'defcompile'], fname) --- 21,28 ---- endtry endfunc ! # Check that "lines" inside a ":def" function has no error when compiled. ! export func CheckDefCompileSuccess(lines) let fname = 'XdefSuccess' .. s:sequence let s:sequence += 1 call writefile(['def Func()'] + a:lines + ['enddef', 'defcompile'], fname) *************** *** 32,42 **** endtry endfunc ! " Check that "lines" inside ":def" results in an "error" message. ! " If "lnum" is given check that the error is reported for this line. ! " Add a line before and after to make it less likely that the line number is ! " accidentally correct. ! func CheckDefFailure(lines, error, lnum = -3) let cwd = getcwd() let fname = 'XdefFailure' .. s:sequence let s:sequence += 1 --- 34,44 ---- endtry endfunc ! # Check that "lines" inside ":def" results in an "error" message. ! # If "lnum" is given check that the error is reported for this line. ! # Add a line before and after to make it less likely that the line number is ! # accidentally correct. ! export func CheckDefFailure(lines, error, lnum = -3) let cwd = getcwd() let fname = 'XdefFailure' .. s:sequence let s:sequence += 1 *************** *** 50,60 **** endtry endfunc ! " Check that "lines" inside ":def" results in an "error" message when executed. ! " If "lnum" is given check that the error is reported for this line. ! " Add a line before and after to make it less likely that the line number is ! " accidentally correct. ! func CheckDefExecFailure(lines, error, lnum = -3) let cwd = getcwd() let fname = 'XdefExecFailure' .. s:sequence let s:sequence += 1 --- 52,62 ---- endtry endfunc ! # Check that "lines" inside ":def" results in an "error" message when executed. ! # If "lnum" is given check that the error is reported for this line. ! # Add a line before and after to make it less likely that the line number is ! # accidentally correct. ! export func CheckDefExecFailure(lines, error, lnum = -3) let cwd = getcwd() let fname = 'XdefExecFailure' .. s:sequence let s:sequence += 1 *************** *** 69,75 **** endtry endfunc ! def CheckScriptFailure(lines: list, error: string, lnum = -3) var cwd = getcwd() var fname = 'XScriptFailure' .. s:sequence s:sequence += 1 --- 71,77 ---- endtry endfunc ! export def CheckScriptFailure(lines: list, error: string, lnum = -3) var cwd = getcwd() var fname = 'XScriptFailure' .. s:sequence s:sequence += 1 *************** *** 82,88 **** endtry enddef ! def CheckScriptFailureList(lines: list, errors: list, lnum = -3) var cwd = getcwd() var fname = 'XScriptFailure' .. s:sequence s:sequence += 1 --- 84,90 ---- endtry enddef ! export def CheckScriptFailureList(lines: list, errors: list, lnum = -3) var cwd = getcwd() var fname = 'XScriptFailure' .. s:sequence s:sequence += 1 *************** *** 95,101 **** endtry enddef ! def CheckScriptSuccess(lines: list) var cwd = getcwd() var fname = 'XScriptSuccess' .. s:sequence s:sequence += 1 --- 97,103 ---- endtry enddef ! export def CheckScriptSuccess(lines: list) var cwd = getcwd() var fname = 'XScriptSuccess' .. s:sequence s:sequence += 1 *************** *** 108,124 **** endtry enddef ! def CheckDefAndScriptSuccess(lines: list) CheckDefSuccess(lines) CheckScriptSuccess(['vim9script'] + lines) enddef ! " Check that a command fails when used in a :def function and when used in ! " Vim9 script. ! " When "error" is a string, both with the same error. ! " When "error" is a list, the :def function fails with "error[0]" , the script ! " fails with "error[1]". ! def CheckDefAndScriptFailure(lines: list, error: any, lnum = -3) var errorDef: string var errorScript: string if type(error) == v:t_string --- 110,126 ---- endtry enddef ! export def CheckDefAndScriptSuccess(lines: list) CheckDefSuccess(lines) CheckScriptSuccess(['vim9script'] + lines) enddef ! # Check that a command fails when used in a :def function and when used in ! # Vim9 script. ! # When "error" is a string, both with the same error. ! # When "error" is a list, the :def function fails with "error[0]" , the script ! # fails with "error[1]". ! export def CheckDefAndScriptFailure(lines: list, error: any, lnum = -3) var errorDef: string var errorScript: string if type(error) == v:t_string *************** *** 135,146 **** CheckScriptFailure(['vim9script'] + lines, errorScript, lnum + 1) enddef ! " Check that a command fails when executed in a :def function and when used in ! " Vim9 script. ! " When "error" is a string, both with the same error. ! " When "error" is a list, the :def function fails with "error[0]" , the script ! " fails with "error[1]". ! def CheckDefExecAndScriptFailure(lines: list, error: any, lnum = -3) var errorDef: string var errorScript: string if type(error) == v:t_string --- 137,148 ---- CheckScriptFailure(['vim9script'] + lines, errorScript, lnum + 1) enddef ! # Check that a command fails when executed in a :def function and when used in ! # Vim9 script. ! # When "error" is a string, both with the same error. ! # When "error" is a list, the :def function fails with "error[0]" , the script ! # fails with "error[1]". ! export def CheckDefExecAndScriptFailure(lines: list, error: any, lnum = -3) var errorDef: string var errorScript: string if type(error) == v:t_string *************** *** 158,165 **** enddef ! " Check that "lines" inside a legacy function has no error. ! func CheckLegacySuccess(lines) let cwd = getcwd() let fname = 'XlegacySuccess' .. s:sequence let s:sequence += 1 --- 160,167 ---- enddef ! # Check that "lines" inside a legacy function has no error. ! export func CheckLegacySuccess(lines) let cwd = getcwd() let fname = 'XlegacySuccess' .. s:sequence let s:sequence += 1 *************** *** 174,181 **** endtry endfunc ! " Check that "lines" inside a legacy function results in the expected error ! func CheckLegacyFailure(lines, error) let cwd = getcwd() let fname = 'XlegacyFails' .. s:sequence let s:sequence += 1 --- 176,183 ---- endtry endfunc ! # Check that "lines" inside a legacy function results in the expected error ! export func CheckLegacyFailure(lines, error) let cwd = getcwd() let fname = 'XlegacyFails' .. s:sequence let s:sequence += 1 *************** *** 189,197 **** endtry endfunc ! " Execute "lines" in a legacy function, translated as in ! " CheckLegacyAndVim9Success() ! def CheckTransLegacySuccess(lines: list) var legacylines = lines->mapnew((_, v) => v->substitute('\', 'let', 'g') ->substitute('\', 'let', 'g') --- 191,199 ---- endtry endfunc ! # Execute "lines" in a legacy function, translated as in ! # CheckLegacyAndVim9Success() ! export def CheckTransLegacySuccess(lines: list) var legacylines = lines->mapnew((_, v) => v->substitute('\', 'let', 'g') ->substitute('\', 'let', 'g') *************** *** 204,210 **** CheckLegacySuccess(legacylines) enddef ! def Vim9Trans(lines: list): list return lines->mapnew((_, v) => v->substitute('\', 'var', 'g') ->substitute('\): list return lines->mapnew((_, v) => v->substitute('\', 'var', 'g') ->substitute('\substitute('\', 'false', 'g')) enddef ! " Execute "lines" in a :def function, translated as in ! " CheckLegacyAndVim9Success() ! def CheckTransDefSuccess(lines: list) CheckDefSuccess(Vim9Trans(lines)) enddef ! " Execute "lines" in a Vim9 script, translated as in ! " CheckLegacyAndVim9Success() ! def CheckTransVim9Success(lines: list) CheckScriptSuccess(['vim9script'] + Vim9Trans(lines)) enddef ! " Execute "lines" in a legacy function, :def function and Vim9 script. ! " Use 'VAR' for a declaration. ! " Use 'LET' for an assignment ! " Use ' #"' for a comment ! " Use LSTART arg LMIDDLE expr LEND for lambda ! " Use 'TRUE' for 1 in legacy, true in Vim9 ! " Use 'FALSE' for 0 in legacy, false in Vim9 ! def CheckLegacyAndVim9Success(lines: list) CheckTransLegacySuccess(lines) CheckTransDefSuccess(lines) CheckTransVim9Success(lines) enddef ! " Execute "lines" in a legacy function, :def function and Vim9 script. ! " Use 'VAR' for a declaration. ! " Use 'LET' for an assignment ! " Use ' #"' for a comment ! def CheckLegacyAndVim9Failure(lines: list, error: any) var legacyError: string var defError: string var scriptError: string --- 217,252 ---- ->substitute('\', 'false', 'g')) enddef ! # Execute "lines" in a :def function, translated as in ! # CheckLegacyAndVim9Success() ! export def CheckTransDefSuccess(lines: list) CheckDefSuccess(Vim9Trans(lines)) enddef ! # Execute "lines" in a Vim9 script, translated as in ! # CheckLegacyAndVim9Success() ! export def CheckTransVim9Success(lines: list) CheckScriptSuccess(['vim9script'] + Vim9Trans(lines)) enddef ! # Execute "lines" in a legacy function, :def function and Vim9 script. ! # Use 'VAR' for a declaration. ! # Use 'LET' for an assignment ! # Use ' #"' for a comment ! # Use LSTART arg LMIDDLE expr LEND for lambda ! # Use 'TRUE' for 1 in legacy, true in Vim9 ! # Use 'FALSE' for 0 in legacy, false in Vim9 ! export def CheckLegacyAndVim9Success(lines: list) CheckTransLegacySuccess(lines) CheckTransDefSuccess(lines) CheckTransVim9Success(lines) enddef ! # Execute "lines" in a legacy function, :def function and Vim9 script. ! # Use 'VAR' for a declaration. ! # Use 'LET' for an assignment ! # Use ' #"' for a comment ! export def CheckLegacyAndVim9Failure(lines: list, error: any) var legacyError: string var defError: string var scriptError: string *** ../vim-8.2.4256/src/testdir/test_vim9_assign.vim 2022-01-27 16:36:25.419543625 +0000 --- src/testdir/test_vim9_assign.vim 2022-01-29 17:41:22.440103633 +0000 *************** *** 1,7 **** " Test Vim9 assignments source check.vim ! source vim9.vim source term_util.vim let s:appendToMe = 'xxx' --- 1,7 ---- " Test Vim9 assignments source check.vim ! import './vim9.vim' as v9 source term_util.vim let s:appendToMe = 'xxx' *************** *** 51,64 **** var cp: bool = &cp var fen: bool = &l:fen END ! CheckScriptSuccess(lines) ! CheckDefAndScriptFailure(['var x: bool = 2'], 'E1012:') ! CheckDefAndScriptFailure(['var x: bool = -1'], 'E1012:') ! CheckDefAndScriptFailure(['var x: bool = [1]'], 'E1012:') ! CheckDefAndScriptFailure(['var x: bool = {}'], 'E1012:') ! CheckDefAndScriptFailure(['var x: bool = "x"'], 'E1012:') ! CheckDefAndScriptFailure(['var x: bool = "x"', '', 'eval 0'], 'E1012:', 1) enddef def Test_syntax() --- 51,64 ---- var cp: bool = &cp var fen: bool = &l:fen END ! v9.CheckScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(['var x: bool = 2'], 'E1012:') ! v9.CheckDefAndScriptFailure(['var x: bool = -1'], 'E1012:') ! v9.CheckDefAndScriptFailure(['var x: bool = [1]'], 'E1012:') ! v9.CheckDefAndScriptFailure(['var x: bool = {}'], 'E1012:') ! v9.CheckDefAndScriptFailure(['var x: bool = "x"'], 'E1012:') ! v9.CheckDefAndScriptFailure(['var x: bool = "x"', '', 'eval 0'], 'E1012:', 1) enddef def Test_syntax() *************** *** 67,87 **** enddef def Test_assignment() ! CheckDefFailure(['var x:string'], 'E1069:') ! CheckDefFailure(['var x:string = "x"'], 'E1069:') ! CheckDefFailure(['var a:string = "x"'], 'E1069:') ! CheckDefFailure(['var lambda = () => "lambda"'], 'E704:') ! CheckScriptFailure(['var x = "x"'], 'E1124:') # lower case name is OK for a list var lambdaLines =<< trim END var lambdaList: list = [Test_syntax] lambdaList[0] = () => "lambda" END ! CheckDefAndScriptSuccess(lambdaLines) var nr: number = 1234 ! CheckDefFailure(['var nr: number = "asdf"'], 'E1012:') var a: number = 6 #comment assert_equal(6, a) --- 67,87 ---- enddef def Test_assignment() ! v9.CheckDefFailure(['var x:string'], 'E1069:') ! v9.CheckDefFailure(['var x:string = "x"'], 'E1069:') ! v9.CheckDefFailure(['var a:string = "x"'], 'E1069:') ! v9.CheckDefFailure(['var lambda = () => "lambda"'], 'E704:') ! v9.CheckScriptFailure(['var x = "x"'], 'E1124:') # lower case name is OK for a list var lambdaLines =<< trim END var lambdaList: list = [Test_syntax] lambdaList[0] = () => "lambda" END ! v9.CheckDefAndScriptSuccess(lambdaLines) var nr: number = 1234 ! v9.CheckDefFailure(['var nr: number = "asdf"'], 'E1012:') var a: number = 6 #comment assert_equal(6, a) *************** *** 122,128 **** assert_equal('barfoo', $ENVVAR) $ENVVAR = '' END ! CheckScriptSuccess(lines) s:appendToMe ..= 'yyy' assert_equal('xxxyyy', s:appendToMe) --- 122,128 ---- assert_equal('barfoo', $ENVVAR) $ENVVAR = '' END ! v9.CheckScriptSuccess(lines) s:appendToMe ..= 'yyy' assert_equal('xxxyyy', s:appendToMe) *************** *** 155,161 **** f200 /= 5.0 assert_equal(40.0, f200) ! CheckDefFailure(['var nr: number = 200', 'nr /= 5.0'], 'E1012:') endif lines =<< trim END --- 155,161 ---- f200 /= 5.0 assert_equal(40.0, f200) ! v9.CheckDefFailure(['var nr: number = 200', 'nr /= 5.0'], 'E1012:') endif lines =<< trim END *************** *** 182,199 **** &number = false assert_equal(false, &number) END ! CheckDefAndScriptSuccess(lines) ! CheckDefFailure(['¬ex += 3'], 'E113:') ! CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') ! CheckDefFailure(['&ts = [7]'], 'E1012:') ! CheckDefExecFailure(['&ts = g:alist'], 'E1012: Type mismatch; expected number but got list') ! CheckDefFailure(['&ts = "xx"'], 'E1012:') ! CheckDefExecFailure(['&ts = g:astring'], 'E1012: Type mismatch; expected number but got string') ! CheckDefFailure(['&path += 3'], 'E1012:') ! CheckDefExecFailure(['&bs = "asdf"'], 'E474:') # test freeing ISN_STOREOPT ! CheckDefFailure(['&ts = 3', 'var asdf'], 'E1022:') &ts = 8 lines =<< trim END --- 182,199 ---- &number = false assert_equal(false, &number) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefFailure(['¬ex += 3'], 'E113:') ! v9.CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') ! v9.CheckDefFailure(['&ts = [7]'], 'E1012:') ! v9.CheckDefExecFailure(['&ts = g:alist'], 'E1012: Type mismatch; expected number but got list') ! v9.CheckDefFailure(['&ts = "xx"'], 'E1012:') ! v9.CheckDefExecFailure(['&ts = g:astring'], 'E1012: Type mismatch; expected number but got string') ! v9.CheckDefFailure(['&path += 3'], 'E1012:') ! v9.CheckDefExecFailure(['&bs = "asdf"'], 'E474:') # test freeing ISN_STOREOPT ! v9.CheckDefFailure(['&ts = 3', 'var asdf'], 'E1022:') &ts = 8 lines =<< trim END *************** *** 204,216 **** assert_equal('xxx', &t_TI) &t_TI = save_TI END ! CheckDefAndScriptSuccess(lines) ! CheckDefFailure(['&t_TI = 123'], 'E1012:') ! CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:') ! CheckDefFailure(['var s:var = 123'], 'E1101:') ! CheckDefFailure(['var s:var: number'], 'E1101:') lines =<< trim END vim9script --- 204,216 ---- assert_equal('xxx', &t_TI) &t_TI = save_TI END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefFailure(['&t_TI = 123'], 'E1012:') ! v9.CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:') ! v9.CheckDefFailure(['var s:var = 123'], 'E1101:') ! v9.CheckDefFailure(['var s:var: number'], 'E1101:') lines =<< trim END vim9script *************** *** 219,225 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1089:') g:inc_counter += 1 assert_equal(2, g:inc_counter) --- 219,225 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1089:') g:inc_counter += 1 assert_equal(2, g:inc_counter) *************** *** 232,245 **** $SOME_ENV_VAR ..= 'more' assert_equal('somemore', $SOME_ENV_VAR) ! CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') ! CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') v:errmsg = 'none' v:errmsg ..= 'again' assert_equal('noneagain', v:errmsg) ! CheckDefFailure(['v:errmsg += "more"'], 'E1051:') ! CheckDefFailure(['v:errmsg += 123'], 'E1012:') var text =<< trim END some text --- 232,245 ---- $SOME_ENV_VAR ..= 'more' assert_equal('somemore', $SOME_ENV_VAR) ! v9.CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') ! v9.CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') v:errmsg = 'none' v:errmsg ..= 'again' assert_equal('noneagain', v:errmsg) ! v9.CheckDefFailure(['v:errmsg += "more"'], 'E1051:') ! v9.CheckDefFailure(['v:errmsg += 123'], 'E1012:') var text =<< trim END some text *************** *** 259,265 **** --f assert_equal(1.0, f) END ! CheckDefAndScriptSuccess(lines) endif enddef --- 259,265 ---- --f assert_equal(1.0, f) END ! v9.CheckDefAndScriptSuccess(lines) endif enddef *************** *** 275,292 **** s ..= g:someNumber assert_equal('-99true-null43', s) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var s = '-' s ..= [1, 2] END ! CheckDefAndScriptFailure(lines, ['E1105: Cannot convert list to string', 'E734: Wrong variable type for .='], 2) lines =<< trim END var s = '-' s ..= {a: 2} END ! CheckDefAndScriptFailure(lines, ['E1105: Cannot convert dict to string', 'E734: Wrong variable type for .='], 2) enddef def Test_assign_register() --- 275,292 ---- s ..= g:someNumber assert_equal('-99true-null43', s) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var s = '-' s ..= [1, 2] END ! v9.CheckDefAndScriptFailure(lines, ['E1105: Cannot convert list to string', 'E734: Wrong variable type for .='], 2) lines =<< trim END var s = '-' s ..= {a: 2} END ! v9.CheckDefAndScriptFailure(lines, ['E1105: Cannot convert dict to string', 'E734: Wrong variable type for .='], 2) enddef def Test_assign_register() *************** *** 298,313 **** @@ = 'some text' assert_equal('some text', getreg('"')) END ! CheckDefAndScriptSuccess(lines) ! CheckDefFailure(['@a += "more"'], 'E1051:') ! CheckDefFailure(['@a += 123'], 'E1012:') enddef def Test_reserved_name() for name in ['true', 'false', 'null'] ! CheckDefExecAndScriptFailure(['var ' .. name .. ' = 0'], 'E1034:') ! CheckDefExecAndScriptFailure(['var ' .. name .. ': bool'], 'E1034:') endfor enddef --- 298,313 ---- @@ = 'some text' assert_equal('some text', getreg('"')) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefFailure(['@a += "more"'], 'E1051:') ! v9.CheckDefFailure(['@a += 123'], 'E1012:') enddef def Test_reserved_name() for name in ['true', 'false', 'null'] ! v9.CheckDefExecAndScriptFailure(['var ' .. name .. ' = 0'], 'E1034:') ! v9.CheckDefExecAndScriptFailure(['var ' .. name .. ': bool'], 'E1034:') endfor enddef *************** *** 320,326 **** endwhile endfor END ! CheckDefAndScriptSuccess(lines) enddef def Test_assign_keep_type() --- 320,326 ---- endwhile endfor END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_assign_keep_type() *************** *** 330,336 **** l = [123] l->add('string') END ! CheckScriptFailure(lines, 'E1012:', 4) enddef def Test_assign_unpack() --- 330,336 ---- l = [123] l->add('string') END ! v9.CheckScriptFailure(lines, 'E1012:', 4) enddef def Test_assign_unpack() *************** *** 382,443 **** assert_equal(2, a) assert_equal(0, b) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var v1: number var v2: number [v1, v2] = [1, 2, 3] END ! CheckDefFailure(lines, 'E1093: Expected 2 items but got 3', 3) lines =<< trim END var v1: number var v2: number [v1, v2] = [1] END ! CheckDefFailure(lines, 'E1093: Expected 2 items but got 1', 3) lines =<< trim END var v1: number var v2: number [v1, v2; _] = [1] END ! CheckDefFailure(lines, 'E1093: Expected 2 items but got 1', 3) lines =<< trim END var v1: number var v2: number [v1, v2] = END ! CheckDefFailure(lines, 'E1097:', 5) lines =<< trim END var v1: number var v2: number [v1, v2] = xxx END ! CheckDefFailure(lines, 'E1001:', 3) lines =<< trim END var v1: number var v2: number [v1, v2] = popup_clear() END ! CheckDefFailure(lines, 'E1031:', 3) lines =<< trim END [v1, v2] = [1, 2] END ! CheckDefFailure(lines, 'E1089', 1) ! CheckScriptFailure(['vim9script'] + lines, 'E1089', 2) lines =<< trim END var v1: number var v2: number [v1, v2] = '' END ! CheckDefFailure(lines, 'E1012: Type mismatch; expected list but got string', 3) lines =<< trim END g:values = [false, 0] --- 382,443 ---- assert_equal(2, a) assert_equal(0, b) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var v1: number var v2: number [v1, v2] = [1, 2, 3] END ! v9.CheckDefFailure(lines, 'E1093: Expected 2 items but got 3', 3) lines =<< trim END var v1: number var v2: number [v1, v2] = [1] END ! v9.CheckDefFailure(lines, 'E1093: Expected 2 items but got 1', 3) lines =<< trim END var v1: number var v2: number [v1, v2; _] = [1] END ! v9.CheckDefFailure(lines, 'E1093: Expected 2 items but got 1', 3) lines =<< trim END var v1: number var v2: number [v1, v2] = END ! v9.CheckDefFailure(lines, 'E1097:', 5) lines =<< trim END var v1: number var v2: number [v1, v2] = xxx END ! v9.CheckDefFailure(lines, 'E1001:', 3) lines =<< trim END var v1: number var v2: number [v1, v2] = popup_clear() END ! v9.CheckDefFailure(lines, 'E1031:', 3) lines =<< trim END [v1, v2] = [1, 2] END ! v9.CheckDefFailure(lines, 'E1089', 1) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1089', 2) lines =<< trim END var v1: number var v2: number [v1, v2] = '' END ! v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected list but got string', 3) lines =<< trim END g:values = [false, 0] *************** *** 445,451 **** var y: string [x, y] = g:values END ! CheckDefExecAndScriptFailure(lines, 'E1163: Variable 2: type mismatch, expected string but got number') lines =<< trim END var x: number --- 445,451 ---- var y: string [x, y] = g:values END ! v9.CheckDefExecAndScriptFailure(lines, 'E1163: Variable 2: type mismatch, expected string but got number') lines =<< trim END var x: number *************** *** 453,459 **** var z: string [x, y, z] = [1, 2, 3] END ! CheckDefAndScriptFailure(lines, 'E1163: Variable 3: type mismatch, expected string but got number') lines =<< trim END var x: number --- 453,459 ---- var z: string [x, y, z] = [1, 2, 3] END ! v9.CheckDefAndScriptFailure(lines, 'E1163: Variable 3: type mismatch, expected string but got number') lines =<< trim END var x: number *************** *** 461,467 **** var z: string [x, y, z] = [1, '2', 3] END ! CheckDefExecAndScriptFailure(lines, 'E1163: Variable 3: type mismatch, expected string but got number') enddef def Test_assign_linebreak() --- 461,467 ---- var z: string [x, y, z] = [1, '2', 3] END ! v9.CheckDefExecAndScriptFailure(lines, 'E1163: Variable 3: type mismatch, expected string but got number') enddef def Test_assign_linebreak() *************** *** 476,482 **** assert_equal(12, nr) assert_equal(34, n2) ! CheckDefFailure(["var x = #"], 'E1097:', 3) var lines =<< trim END var x: list = ['a'] --- 476,482 ---- assert_equal(12, nr) assert_equal(34, n2) ! v9.CheckDefFailure(["var x = #"], 'E1097:', 3) var lines =<< trim END var x: list = ['a'] *************** *** 484,490 **** ->copy() ->copy() END ! CheckDefFailure(lines, 'E1012:', 2) lines =<< trim END var x: any --- 484,490 ---- ->copy() ->copy() END ! v9.CheckDefFailure(lines, 'E1012:', 2) lines =<< trim END var x: any *************** *** 494,500 **** + 4 + 5 END ! CheckDefExecAndScriptFailure(lines, ['E1148:', 'E1203:'], 2) enddef def Test_assign_index() --- 494,500 ---- + 4 + 5 END ! v9.CheckDefExecAndScriptFailure(lines, ['E1148:', 'E1203:'], 2) enddef def Test_assign_index() *************** *** 519,525 **** l3[0] = [] l3[0][0] = [] END ! CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got list', 3) # dict of dict var d1: dict --- 519,525 ---- l3[0] = [] l3[0][0] = [] END ! v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got list', 3) # dict of dict var d1: dict *************** *** 548,566 **** d3.one = {} d3.one.two = {} END ! CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got dict', 3) lines =<< trim END var lines: list lines['a'] = 'asdf' END ! CheckDefFailure(lines, 'E1012:', 2) lines =<< trim END var lines: string lines[9] = 'asdf' END ! CheckDefFailure(lines, 'E1141:', 2) # list of dict var ld: list> --- 548,566 ---- d3.one = {} d3.one.two = {} END ! v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got dict', 3) lines =<< trim END var lines: list lines['a'] = 'asdf' END ! v9.CheckDefFailure(lines, 'E1012:', 2) lines =<< trim END var lines: string lines[9] = 'asdf' END ! v9.CheckDefFailure(lines, 'E1141:', 2) # list of dict var ld: list> *************** *** 572,578 **** var ld: list> ld[0] = [] END ! CheckDefFailure(lines, 'E1012: Type mismatch; expected dict but got list', 2) # dict of list var dl: dict> --- 572,578 ---- var ld: list> ld[0] = [] END ! v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected dict but got list', 2) # dict of list var dl: dict> *************** *** 584,590 **** var dl: dict> dl.one = {} END ! CheckDefFailure(lines, 'E1012: Type mismatch; expected list but got dict', 2) enddef def Test_init_in_for_loop() --- 584,590 ---- var dl: dict> dl.one = {} END ! v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected list but got dict', 2) enddef def Test_init_in_for_loop() *************** *** 597,603 **** endfor assert_equal([0, 0], l) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var l: list = [] --- 597,603 ---- endfor assert_equal([0, 0], l) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var l: list = [] *************** *** 608,614 **** endfor assert_equal([0, 0], l) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var l: list = [] --- 608,614 ---- endfor assert_equal([0, 0], l) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var l: list = [] *************** *** 619,625 **** endfor assert_equal([3, 3], l) END ! CheckDefAndScriptSuccess(lines) enddef def Test_extend_list() --- 619,625 ---- endfor assert_equal([3, 3], l) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_extend_list() *************** *** 631,644 **** assert_equal([123], l1) assert_true(l1 is l2) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var list: list extend(list, ['x']) assert_equal(['x'], list) END ! CheckDefAndScriptSuccess(lines) # appending to NULL list from a function lines =<< trim END --- 631,644 ---- assert_equal([123], l1) assert_true(l1 is l2) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var list: list extend(list, ['x']) assert_equal(['x'], list) END ! v9.CheckDefAndScriptSuccess(lines) # appending to NULL list from a function lines =<< trim END *************** *** 650,656 **** Func() assert_equal(['a', 'b'], list) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script var list: list --- 650,656 ---- Func() assert_equal(['a', 'b'], list) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script var list: list *************** *** 660,666 **** Func() assert_equal(['x', 'b'], list) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 660,666 ---- Func() assert_equal(['x', 'b'], list) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 668,680 **** extend(l, ['x']) assert_equal(['x'], l) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script extend(test_null_list(), ['x']) END ! CheckScriptFailure(lines, 'E1134:', 2) # using global var has no declared type g:myList = [] --- 668,680 ---- extend(l, ['x']) assert_equal(['x'], l) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script extend(test_null_list(), ['x']) END ! v9.CheckScriptFailure(lines, 'E1134:', 2) # using global var has no declared type g:myList = [] *************** *** 690,696 **** g:myList->extend([1]) g:myList->extend(['x']) END ! CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list but got list', 4) unlet g:myList enddef --- 690,696 ---- g:myList->extend([1]) g:myList->extend(['x']) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list but got list', 4) unlet g:myList enddef *************** *** 705,711 **** d2['one'] = 1 assert_equal({one: 1}, d2) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 705,711 ---- d2['one'] = 1 assert_equal({one: 1}, d2) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 713,725 **** extend(d, {a: 'x'}) assert_equal({a: 'x'}, d) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script extend(test_null_dict(), {a: 'x'}) END ! CheckScriptFailure(lines, 'E1133:', 2) enddef def Test_single_letter_vars() --- 713,725 ---- extend(d, {a: 'x'}) assert_equal({a: 'x'}, d) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script extend(test_null_dict(), {a: 'x'}) END ! v9.CheckScriptFailure(lines, 'E1133:', 2) enddef def Test_single_letter_vars() *************** *** 805,811 **** list3 += ['end'] assert_equal(['sdf', 'asdf', 'end'], list3) ! CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') # type becomes list var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] --- 805,811 ---- list3 += ['end'] assert_equal(['sdf', 'asdf', 'end'], list3) ! v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') # type becomes list var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] *************** *** 818,824 **** var d = {dd: test_null_list()} d.dd[0] = 0 END ! CheckDefExecFailure(lines, 'E1147:', 2) lines =<< trim END def OneArg(x: bool) --- 818,824 ---- var d = {dd: test_null_list()} d.dd[0] = 0 END ! v9.CheckDefExecFailure(lines, 'E1147:', 2) lines =<< trim END def OneArg(x: bool) *************** *** 827,833 **** enddef var fl: list = [OneArg, TwoArgs] END ! CheckDefExecAndScriptFailure(lines, 'E1012:', 5) enddef def Test_list_declaration() --- 827,833 ---- enddef var fl: list = [OneArg, TwoArgs] END ! v9.CheckDefExecAndScriptFailure(lines, 'E1012:', 5) enddef def Test_list_declaration() *************** *** 840,860 **** var lines =<< trim END var [v1, v2] = [1] END ! CheckDefExecAndScriptFailure(lines, ['E1093: Expected 2 items but got 1', 'E688:']) lines =<< trim END var testlist = [1] var [v1, v2] = testlist END ! CheckDefExecAndScriptFailure(lines, ['E1093: Expected 2 items but got 1', 'E688:']) lines =<< trim END var [v1, v2] = [1, 2, 3] END ! CheckDefExecAndScriptFailure(lines, ['E1093: Expected 2 items but got 3', 'E687:']) lines =<< trim END var testlist = [1, 2, 3] var [v1, v2] = testlist END ! CheckDefExecAndScriptFailure(lines, ['E1093: Expected 2 items but got 3', 'E687:']) var [vnr, vstr] = [123, 'text'] vnr += 3 --- 840,860 ---- var lines =<< trim END var [v1, v2] = [1] END ! v9.CheckDefExecAndScriptFailure(lines, ['E1093: Expected 2 items but got 1', 'E688:']) lines =<< trim END var testlist = [1] var [v1, v2] = testlist END ! v9.CheckDefExecAndScriptFailure(lines, ['E1093: Expected 2 items but got 1', 'E688:']) lines =<< trim END var [v1, v2] = [1, 2, 3] END ! v9.CheckDefExecAndScriptFailure(lines, ['E1093: Expected 2 items but got 3', 'E687:']) lines =<< trim END var testlist = [1, 2, 3] var [v1, v2] = testlist END ! v9.CheckDefExecAndScriptFailure(lines, ['E1093: Expected 2 items but got 3', 'E687:']) var [vnr, vstr] = [123, 'text'] vnr += 3 *************** *** 876,887 **** lines =<< trim END var [vnr2: number, vstr2: number] = [123, 'text'] END ! CheckDefExecAndScriptFailure(lines, ['E1163: Variable 2: type mismatch, expected number but got string', 'E1012: Type mismatch; expected number but got string']) lines =<< trim END var testlist = [234, 'text'] var [vnr2: number, vstr2: number] = testlist END ! CheckDefExecAndScriptFailure(lines, ['E1163: Variable 2: type mismatch, expected number but got string', 'E1012: Type mismatch; expected number but got string']) enddef def PartFuncBool(b: bool): string --- 876,887 ---- lines =<< trim END var [vnr2: number, vstr2: number] = [123, 'text'] END ! v9.CheckDefExecAndScriptFailure(lines, ['E1163: Variable 2: type mismatch, expected number but got string', 'E1012: Type mismatch; expected number but got string']) lines =<< trim END var testlist = [234, 'text'] var [vnr2: number, vstr2: number] = testlist END ! v9.CheckDefExecAndScriptFailure(lines, ['E1163: Variable 2: type mismatch, expected number but got string', 'E1012: Type mismatch; expected number but got string']) enddef def PartFuncBool(b: bool): string *************** *** 893,899 **** var Partial: func(): string = function(PartFuncBool, [true]) assert_equal('done', Partial()) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END vim9script --- 893,899 ---- var Partial: func(): string = function(PartFuncBool, [true]) assert_equal('done', Partial()) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END vim9script *************** *** 903,909 **** assert_equal('func()', typename(Ref)) Ref() END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 903,909 ---- assert_equal('func()', typename(Ref)) Ref() END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 921,927 **** assert_equal(0, nres) assert_equal('x', sres) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 921,927 ---- assert_equal(0, nres) assert_equal('x', sres) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 933,939 **** var Ref = function(Func, [n]) Ref(0) END ! CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected string but got number') enddef def Test_assignment_list_any_index() --- 933,939 ---- var Ref = function(Func, [n]) Ref(0) END ! v9.CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected string but got number') enddef def Test_assignment_list_any_index() *************** *** 954,960 **** [v1, v2, v3] = [1, 2, 3] assert_equal([1, 2, 3], [v1, v2, v3]) END ! CheckScriptSuccess(lines) enddef def Test_assignment_dict() --- 954,960 ---- [v1, v2, v3] = [1, 2, 3] assert_equal([1, 2, 3], [v1, v2, v3]) END ! v9.CheckScriptSuccess(lines) enddef def Test_assignment_dict() *************** *** 981,987 **** dd.two = 2 assert_equal({two: 2}, dd) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var d = {dd: {}} --- 981,987 ---- dd.two = 2 assert_equal({two: 2}, dd) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var d = {dd: {}} *************** *** 990,1008 **** d.dd.y = 4 assert_equal({dd: {0: 2, x: 3, y: 4}}, d) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var dd = {one: 1} dd.one) = 2 END ! CheckDefFailure(lines, 'E488:', 2) lines =<< trim END var dd = {one: 1} var dd.one = 2 END ! CheckDefAndScriptFailure(lines, 'E1017:', 2) # empty key can be used var dd = {} --- 990,1008 ---- d.dd.y = 4 assert_equal({dd: {0: 2, x: 3, y: 4}}, d) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var dd = {one: 1} dd.one) = 2 END ! v9.CheckDefFailure(lines, 'E488:', 2) lines =<< trim END var dd = {one: 1} var dd.one = 2 END ! v9.CheckDefAndScriptFailure(lines, 'E1017:', 2) # empty key can be used var dd = {} *************** *** 1030,1036 **** g:myDict->extend({a: 1}) g:myDict->extend({b: 'x'}) END ! CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict but got dict', 4) unlet g:myDict # assignment to script-local dict --- 1030,1036 ---- g:myDict->extend({a: 1}) g:myDict->extend({b: 'x'}) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict but got dict', 4) unlet g:myDict # assignment to script-local dict *************** *** 1043,1049 **** enddef assert_equal({a: 43}, FillDict()) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1043,1049 ---- enddef assert_equal({a: 43}, FillDict()) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1055,1061 **** FillDict() assert_equal({a: 43}, test) END ! CheckScriptSuccess(lines) # assignment to global dict lines =<< trim END --- 1055,1061 ---- FillDict() assert_equal({a: 43}, test) END ! v9.CheckScriptSuccess(lines) # assignment to global dict lines =<< trim END *************** *** 1067,1073 **** enddef assert_equal({a: 43}, FillDict()) END ! CheckScriptSuccess(lines) # assignment to buffer dict lines =<< trim END --- 1067,1073 ---- enddef assert_equal({a: 43}, FillDict()) END ! v9.CheckScriptSuccess(lines) # assignment to buffer dict lines =<< trim END *************** *** 1079,1103 **** enddef assert_equal({a: 43}, FillDict()) END ! CheckScriptSuccess(lines) lines =<< trim END var d = {dd: test_null_dict()} d.dd[0] = 0 END ! CheckDefExecFailure(lines, 'E1103:', 2) lines =<< trim END var d = {dd: 'string'} d.dd[0] = 0 END ! CheckDefExecFailure(lines, 'E1148:', 2) lines =<< trim END var n: any n.key = 5 END ! CheckDefExecAndScriptFailure(lines, ['E1148:', 'E1203: Dot can only be used on a dictionary: n.key = 5'], 2) enddef def Test_assignment_local() --- 1079,1103 ---- enddef assert_equal({a: 43}, FillDict()) END ! v9.CheckScriptSuccess(lines) lines =<< trim END var d = {dd: test_null_dict()} d.dd[0] = 0 END ! v9.CheckDefExecFailure(lines, 'E1103:', 2) lines =<< trim END var d = {dd: 'string'} d.dd[0] = 0 END ! v9.CheckDefExecFailure(lines, 'E1148:', 2) lines =<< trim END var n: any n.key = 5 END ! v9.CheckDefExecAndScriptFailure(lines, ['E1148:', 'E1203: Dot can only be used on a dictionary: n.key = 5'], 2) enddef def Test_assignment_local() *************** *** 1135,1141 **** enddef call Test_assignment_local_internal() END ! CheckScriptSuccess(script_lines) enddef def Test_assignment_default() --- 1135,1141 ---- enddef call Test_assignment_local_internal() END ! v9.CheckScriptSuccess(script_lines) enddef def Test_assignment_default() *************** *** 1231,1237 **** assert_equal('error', v:errmsg) unlet g:globalvar END ! CheckDefAndScriptSuccess(lines) [g:globalvar, s:scriptvar, b:bufvar] = ['global', 'script', 'buf'] assert_equal('global', g:globalvar) --- 1231,1237 ---- assert_equal('error', v:errmsg) unlet g:globalvar END ! v9.CheckDefAndScriptSuccess(lines) [g:globalvar, s:scriptvar, b:bufvar] = ['global', 'script', 'buf'] assert_equal('global', g:globalvar) *************** *** 1246,1252 **** assert_equal('script', s:scriptvar) assert_equal('win', w:winvar) END ! CheckScriptSuccess(lines) enddef def Test_assignment_vim9script() --- 1246,1252 ---- assert_equal('script', s:scriptvar) assert_equal('win', w:winvar) END ! v9.CheckScriptSuccess(lines) enddef def Test_assignment_vim9script() *************** *** 1297,1303 **** to_var = 3 assert_equal(3, to_var) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1297,1303 ---- to_var = 3 assert_equal(3, to_var) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1307,1313 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1012: Type mismatch; expected number but got string') enddef def Mess(): string --- 1307,1313 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected number but got string') enddef def Mess(): string *************** *** 1316,1408 **** enddef def Test_assignment_failure() ! CheckDefFailure(['var name=234'], 'E1004:') ! CheckDefFailure(['var name =234'], 'E1004:') ! CheckDefFailure(['var name= 234'], 'E1004:') ! ! CheckScriptFailure(['vim9script', 'var name=234'], 'E1004:') ! CheckScriptFailure(['vim9script', 'var name=234'], "before and after '='") ! CheckScriptFailure(['vim9script', 'var name =234'], 'E1004:') ! CheckScriptFailure(['vim9script', 'var name= 234'], 'E1004:') ! CheckScriptFailure(['vim9script', 'var name = 234', 'name+=234'], 'E1004:') ! CheckScriptFailure(['vim9script', 'var name = 234', 'name+=234'], "before and after '+='") ! CheckScriptFailure(['vim9script', 'var name = "x"', 'name..="y"'], 'E1004:') ! CheckScriptFailure(['vim9script', 'var name = "x"', 'name..="y"'], "before and after '..='") ! ! CheckDefFailure(['var true = 1'], 'E1034:') ! CheckDefFailure(['var false = 1'], 'E1034:') ! CheckDefFailure(['var null = 1'], 'E1034:') ! CheckDefFailure(['var this = 1'], 'E1034:') ! CheckDefFailure(['[a; b; c] = g:list'], 'E452:') ! CheckDefExecFailure(['var a: number', '[a] = test_null_list()'], 'E1093:') ! CheckDefExecFailure(['var a: number', '[a] = []'], 'E1093:') ! CheckDefExecFailure(['var x: number', 'var y: number', '[x, y] = [1]'], 'E1093:') ! CheckDefExecFailure(['var x: string', 'var y: string', '[x, y] = ["x"]'], 'E1093:') ! CheckDefExecFailure(['var x: number', 'var y: number', 'var z: list', '[x, y; z] = [1]'], 'E1093:') ! CheckDefFailure(['var somevar'], "E1022:") ! CheckDefFailure(['var &tabstop = 4'], 'E1052:') ! CheckDefFailure(['&g:option = 5'], 'E113:') ! CheckScriptFailure(['vim9script', 'var &tabstop = 4'], 'E1052:') ! CheckDefFailure(['var $VAR = 5'], 'E1016: Cannot declare an environment variable:') ! CheckScriptFailure(['vim9script', 'var $ENV = "xxx"'], 'E1016:') if has('dnd') ! CheckDefFailure(['var @~ = 5'], 'E1066:') else ! CheckDefFailure(['var @~ = 5'], 'E354:') ! CheckDefFailure(['@~ = 5'], 'E354:') endif ! CheckDefFailure(['var @a = 5'], 'E1066:') ! CheckDefFailure(['var @/ = "x"'], 'E1066:') ! CheckScriptFailure(['vim9script', 'var @a = "abc"'], 'E1066:') ! ! CheckDefFailure(['var g:var = 5'], 'E1016: Cannot declare a global variable:') ! CheckDefFailure(['var w:var = 5'], 'E1016: Cannot declare a window variable:') ! CheckDefFailure(['var b:var = 5'], 'E1016: Cannot declare a buffer variable:') ! CheckDefFailure(['var t:var = 5'], 'E1016: Cannot declare a tab variable:') ! ! CheckDefFailure(['var anr = 4', 'anr ..= "text"'], 'E1019:') ! CheckDefFailure(['var xnr += 4'], 'E1020:', 1) ! CheckScriptFailure(['vim9script', 'var xnr += 4'], 'E1020:') ! CheckDefFailure(["var xnr = xnr + 1"], 'E1001:', 1) ! CheckScriptFailure(['vim9script', 'var xnr = xnr + 4'], 'E121:') ! ! CheckScriptFailure(['vim9script', 'def Func()', 'var dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') ! ! CheckDefFailure(['var name: list = [123]'], 'expected list but got list') ! CheckDefFailure(['var name: list = ["xx"]'], 'expected list but got list') ! CheckDefFailure(['var name: dict = {key: 123}'], 'expected dict but got dict') ! CheckDefFailure(['var name: dict = {key: "xx"}'], 'expected dict but got dict') ! CheckDefFailure(['var name = feedkeys("0")'], 'E1031:') ! CheckDefFailure(['var name: number = feedkeys("0")'], 'expected number but got void') ! CheckDefFailure(['var name: dict '], 'E1068:') ! CheckDefFailure(['var name: dict', '[x, y; z] = [1]'], 'E1093:') ! v9.CheckDefFailure(['var somevar'], "E1022:") ! v9.CheckDefFailure(['var &tabstop = 4'], 'E1052:') ! v9.CheckDefFailure(['&g:option = 5'], 'E113:') ! v9.CheckScriptFailure(['vim9script', 'var &tabstop = 4'], 'E1052:') ! v9.CheckDefFailure(['var $VAR = 5'], 'E1016: Cannot declare an environment variable:') ! v9.CheckScriptFailure(['vim9script', 'var $ENV = "xxx"'], 'E1016:') if has('dnd') ! v9.CheckDefFailure(['var @~ = 5'], 'E1066:') else ! v9.CheckDefFailure(['var @~ = 5'], 'E354:') ! v9.CheckDefFailure(['@~ = 5'], 'E354:') endif ! v9.CheckDefFailure(['var @a = 5'], 'E1066:') ! v9.CheckDefFailure(['var @/ = "x"'], 'E1066:') ! v9.CheckScriptFailure(['vim9script', 'var @a = "abc"'], 'E1066:') ! ! v9.CheckDefFailure(['var g:var = 5'], 'E1016: Cannot declare a global variable:') ! v9.CheckDefFailure(['var w:var = 5'], 'E1016: Cannot declare a window variable:') ! v9.CheckDefFailure(['var b:var = 5'], 'E1016: Cannot declare a buffer variable:') ! v9.CheckDefFailure(['var t:var = 5'], 'E1016: Cannot declare a tab variable:') ! ! v9.CheckDefFailure(['var anr = 4', 'anr ..= "text"'], 'E1019:') ! v9.CheckDefFailure(['var xnr += 4'], 'E1020:', 1) ! v9.CheckScriptFailure(['vim9script', 'var xnr += 4'], 'E1020:') ! v9.CheckDefFailure(["var xnr = xnr + 1"], 'E1001:', 1) ! v9.CheckScriptFailure(['vim9script', 'var xnr = xnr + 4'], 'E121:') ! ! v9.CheckScriptFailure(['vim9script', 'def Func()', 'var dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') ! ! v9.CheckDefFailure(['var name: list = [123]'], 'expected list but got list') ! v9.CheckDefFailure(['var name: list = ["xx"]'], 'expected list but got list') ! v9.CheckDefFailure(['var name: dict = {key: 123}'], 'expected dict but got dict') ! v9.CheckDefFailure(['var name: dict = {key: "xx"}'], 'expected dict but got dict') ! v9.CheckDefFailure(['var name = feedkeys("0")'], 'E1031:') ! v9.CheckDefFailure(['var name: number = feedkeys("0")'], 'expected number but got void') ! v9.CheckDefFailure(['var name: dict '], 'E1068:') ! v9.CheckDefFailure(['var name: dict = ['', true]"], 'E1012: Type mismatch; expected list but got list', 1) ! CheckDefFailure(["var l: list> = [['', true]]"], 'E1012: Type mismatch; expected list> but got list>', 1) enddef def Test_assign_dict() --- 1430,1439 ---- ul[2] = 3 assert_equal([1, 2, 3], ul) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefFailure(["var l: list = ['', true]"], 'E1012: Type mismatch; expected list but got list', 1) ! v9.CheckDefFailure(["var l: list> = [['', true]]"], 'E1012: Type mismatch; expected list> but got list>', 1) enddef def Test_assign_dict() *************** *** 1457,1466 **** unlet d.somekey assert_equal({key: 'value', '123': 'qwerty'}, d) END ! CheckDefAndScriptSuccess(lines) ! CheckDefFailure(["var d: dict = {a: '', b: true}"], 'E1012: Type mismatch; expected dict but got dict', 1) ! CheckDefFailure(["var d: dict> = {x: {a: '', b: true}}"], 'E1012: Type mismatch; expected dict> but got dict>', 1) enddef def Test_assign_dict_unknown_type() --- 1457,1466 ---- unlet d.somekey assert_equal({key: 'value', '123': 'qwerty'}, d) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefFailure(["var d: dict = {a: '', b: true}"], 'E1012: Type mismatch; expected dict but got dict', 1) ! v9.CheckDefFailure(["var d: dict> = {x: {a: '', b: true}}"], 'E1012: Type mismatch; expected dict> but got dict>', 1) enddef def Test_assign_dict_unknown_type() *************** *** 1474,1480 **** enddef Func() END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1474,1480 ---- enddef Func() END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1486,1492 **** enddef Func() END ! CheckScriptSuccess(lines) enddef def Test_assign_dict_with_op() --- 1486,1492 ---- enddef Func() END ! v9.CheckScriptSuccess(lines) enddef def Test_assign_dict_with_op() *************** *** 1532,1538 **** dab.a[0] ..= 'c' assert_equal({a: ['bc']}, dab) END ! CheckDefAndScriptSuccess(lines) enddef def Test_assign_list_with_op() --- 1532,1538 ---- dab.a[0] ..= 'c' assert_equal({a: ['bc']}, dab) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_assign_list_with_op() *************** *** 1557,1563 **** ln[0] %= 3 assert_equal(2, ln[0]) END ! CheckDefAndScriptSuccess(lines) enddef def Test_assign_with_op_fails() --- 1557,1563 ---- ln[0] %= 3 assert_equal(2, ln[0]) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_assign_with_op_fails() *************** *** 1565,1584 **** var s = 'abc' s[1] += 'x' END ! CheckDefAndScriptFailure(lines, ['E1141:', 'E689:'], 2) lines =<< trim END var s = 'abc' s[1] ..= 'x' END ! CheckDefAndScriptFailure(lines, ['E1141:', 'E689:'], 2) lines =<< trim END var dd: dict>> dd.a = {} dd.a.b += [1] END ! CheckDefExecAndScriptFailure(lines, 'E716:', 3) enddef def Test_assign_lambda() --- 1565,1584 ---- var s = 'abc' s[1] += 'x' END ! v9.CheckDefAndScriptFailure(lines, ['E1141:', 'E689:'], 2) lines =<< trim END var s = 'abc' s[1] ..= 'x' END ! v9.CheckDefAndScriptFailure(lines, ['E1141:', 'E689:'], 2) lines =<< trim END var dd: dict>> dd.a = {} dd.a.b += [1] END ! v9.CheckDefExecAndScriptFailure(lines, 'E716:', 3) enddef def Test_assign_lambda() *************** *** 1594,1611 **** var FuncRef_Number: func(): number = () => 321 assert_equal(321, FuncRef_Number()) END ! CheckScriptSuccess(lines) lines =<< trim END var Ref: func(number) Ref = (j) => !j END ! CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(any): bool') lines =<< trim END echo filter([1, 2, 3], (_, v: string) => v + 1) END ! CheckDefAndScriptFailure(lines, 'E1051:') enddef def Test_heredoc() --- 1594,1611 ---- var FuncRef_Number: func(): number = () => 321 assert_equal(321, FuncRef_Number()) END ! v9.CheckScriptSuccess(lines) lines =<< trim END var Ref: func(number) Ref = (j) => !j END ! v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(any): bool') lines =<< trim END echo filter([1, 2, 3], (_, v: string) => v + 1) END ! v9.CheckDefAndScriptFailure(lines, 'E1051:') enddef def Test_heredoc() *************** *** 1614,1621 **** END assert_equal(['text'], lines) ! CheckDefFailure(['var lines =<< trim END X', 'END'], 'E488:') ! CheckDefFailure(['var lines =<< trim END " comment', 'END'], 'E488:') lines =<< trim [END] def Func() --- 1614,1621 ---- END assert_equal(['text'], lines) ! v9.CheckDefFailure(['var lines =<< trim END X', 'END'], 'E488:') ! v9.CheckDefFailure(['var lines =<< trim END " comment', 'END'], 'E488:') lines =<< trim [END] def Func() *************** *** 1625,1631 **** enddef defcompile [END] ! CheckScriptFailure(lines, 'E1145: Missing heredoc end marker: END') delfunc! g:Func lines =<< trim [END] --- 1625,1631 ---- enddef defcompile [END] ! v9.CheckScriptFailure(lines, 'E1145: Missing heredoc end marker: END') delfunc! g:Func lines =<< trim [END] *************** *** 1642,1648 **** enddef call Func() [END] ! CheckScriptFailure(lines, 'E1145: Missing heredoc end marker: END') delfunc! g:Func lines =<< trim END --- 1642,1648 ---- enddef call Func() [END] ! v9.CheckScriptFailure(lines, 'E1145: Missing heredoc end marker: END') delfunc! g:Func lines =<< trim END *************** *** 1651,1657 **** bbb STOP END ! CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got list', 1) enddef def Test_var_func_call() --- 1651,1657 ---- bbb STOP END ! v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got list', 1) enddef def Test_var_func_call() *************** *** 1683,1696 **** vim9script var name = g:unknown END ! CheckScriptFailure(lines, 'E121:') lines =<< trim END vim9script var nr: number = 123 var name = nr END ! CheckScriptSuccess(lines) enddef def Test_var_declaration() --- 1683,1696 ---- vim9script var name = g:unknown END ! v9.CheckScriptFailure(lines, 'E121:') lines =<< trim END vim9script var nr: number = 123 var name = nr END ! v9.CheckScriptSuccess(lines) enddef def Test_var_declaration() *************** *** 1757,1763 **** enddef ChangeAdict() END ! CheckScriptSuccess(lines) assert_equal('', g:var_uninit) assert_equal('text', g:var_test) assert_equal('prefixed', g:var_prefixed) --- 1757,1763 ---- enddef ChangeAdict() END ! v9.CheckScriptSuccess(lines) assert_equal('', g:var_uninit) assert_equal('text', g:var_test) assert_equal('prefixed', g:var_prefixed) *************** *** 1782,1795 **** vim9script final var: string END ! CheckScriptFailure(lines, 'E1125:') lines =<< trim END vim9script const g:constvar = 'string' g:constvar = 'xx' END ! CheckScriptFailure(lines, 'E741:') unlet g:constvar lines =<< trim END --- 1782,1795 ---- vim9script final var: string END ! v9.CheckScriptFailure(lines, 'E1125:') lines =<< trim END vim9script const g:constvar = 'string' g:constvar = 'xx' END ! v9.CheckScriptFailure(lines, 'E741:') unlet g:constvar lines =<< trim END *************** *** 1801,1807 **** enddef SetLocked() END ! CheckScriptFailure(lines, 'E741: Value is locked: name', 1) lines =<< trim END let s:legacy = 'one' --- 1801,1807 ---- enddef SetLocked() END ! v9.CheckScriptFailure(lines, 'E741: Value is locked: name', 1) lines =<< trim END let s:legacy = 'one' *************** *** 1811,1817 **** enddef call SetLocked() END ! CheckScriptFailure(lines, 'E741: Value is locked: s:legacy', 1) lines =<< trim END vim9script --- 1811,1817 ---- enddef call SetLocked() END ! v9.CheckScriptFailure(lines, 'E741: Value is locked: s:legacy', 1) lines =<< trim END vim9script *************** *** 1821,1827 **** SetGlobalConst() g:globConst = 234 END ! CheckScriptFailure(lines, 'E741: Value is locked: g:globConst', 6) unlet g:globConst lines =<< trim END --- 1821,1827 ---- SetGlobalConst() g:globConst = 234 END ! v9.CheckScriptFailure(lines, 'E741: Value is locked: g:globConst', 6) unlet g:globConst lines =<< trim END *************** *** 1832,1862 **** enddef defcompile END ! CheckScriptFailure(lines, 'E46:') lines =<< trim END vim9script final w:finalvar = [9] w:finalvar = [8] END ! CheckScriptFailure(lines, 'E1122:') unlet w:finalvar lines =<< trim END vim9script const var: string END ! CheckScriptFailure(lines, 'E1021:') lines =<< trim END vim9script var 9var: string END ! CheckScriptFailure(lines, 'E488:') ! CheckDefFailure(['var foo.bar = 2'], 'E1087:') ! CheckDefFailure(['var foo[3] = 2'], 'E1087:') ! CheckDefFailure(['const foo: number'], 'E1021:') enddef def Test_script_local_in_legacy() --- 1832,1862 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E46:') lines =<< trim END vim9script final w:finalvar = [9] w:finalvar = [8] END ! v9.CheckScriptFailure(lines, 'E1122:') unlet w:finalvar lines =<< trim END vim9script const var: string END ! v9.CheckScriptFailure(lines, 'E1021:') lines =<< trim END vim9script var 9var: string END ! v9.CheckScriptFailure(lines, 'E488:') ! v9.CheckDefFailure(['var foo.bar = 2'], 'E1087:') ! v9.CheckDefFailure(['var foo[3] = 2'], 'E1087:') ! v9.CheckDefFailure(['const foo: number'], 'E1021:') enddef def Test_script_local_in_legacy() *************** *** 1870,1876 **** call SetLater() call assert_equal('two', s:legvar) END ! CheckScriptSuccess(lines) # OK to leave out s: prefix when script-local already defined lines =<< trim END --- 1870,1876 ---- call SetLater() call assert_equal('two', s:legvar) END ! v9.CheckScriptSuccess(lines) # OK to leave out s: prefix when script-local already defined lines =<< trim END *************** *** 1881,1887 **** call SetNoPrefix() call assert_equal('two', s:legvar) END ! CheckScriptSuccess(lines) # Not OK to leave out s: prefix when script-local defined later lines =<< trim END --- 1881,1887 ---- call SetNoPrefix() call assert_equal('two', s:legvar) END ! v9.CheckScriptSuccess(lines) # Not OK to leave out s: prefix when script-local defined later lines =<< trim END *************** *** 1891,1904 **** defcompile let s:legvar = 'one' END ! CheckScriptFailure(lines, 'E476:', 1) edit! Xfile lines =<< trim END var edit: bool legacy edit END ! CheckDefAndScriptSuccess(lines) enddef def Test_var_type_check() --- 1891,1904 ---- defcompile let s:legvar = 'one' END ! v9.CheckScriptFailure(lines, 'E476:', 1) edit! Xfile lines =<< trim END var edit: bool legacy edit END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_var_type_check() *************** *** 1907,1941 **** var name: string name = 1234 END ! CheckScriptFailure(lines, 'E1012:') lines =<< trim END vim9script var name:string END ! CheckScriptFailure(lines, 'E1069:') ! CheckDefAndScriptFailure(['var n:number = 42'], 'E1069:') lines =<< trim END vim9script var name: asdf END ! CheckScriptFailure(lines, 'E1010:') lines =<< trim END vim9script var s:l: list s:l = [] END ! CheckScriptSuccess(lines) lines =<< trim END vim9script var s:d: dict s:d = {} END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1907,1941 ---- var name: string name = 1234 END ! v9.CheckScriptFailure(lines, 'E1012:') lines =<< trim END vim9script var name:string END ! v9.CheckScriptFailure(lines, 'E1069:') ! v9.CheckDefAndScriptFailure(['var n:number = 42'], 'E1069:') lines =<< trim END vim9script var name: asdf END ! v9.CheckScriptFailure(lines, 'E1010:') lines =<< trim END vim9script var s:l: list s:l = [] END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script var s:d: dict s:d = {} END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1945,1951 **** enddef defcompile END ! CheckScriptSuccess(lines) enddef let g:dict_number = #{one: 1, two: 2} --- 1945,1951 ---- enddef defcompile END ! v9.CheckScriptSuccess(lines) enddef let g:dict_number = #{one: 1, two: 2} *************** *** 1963,1973 **** var ll: list ll = [1, 2, 3]->map('"one"') END ! CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list but got list') enddef def Test_cannot_use_let() ! CheckDefAndScriptFailure(['let a = 34'], 'E1126:', 1) enddef def Test_unlet() --- 1963,1973 ---- var ll: list ll = [1, 2, 3]->map('"one"') END ! v9.CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list but got list') enddef def Test_cannot_use_let() ! v9.CheckDefAndScriptFailure(['let a = 34'], 'E1126:', 1) enddef def Test_unlet() *************** *** 1984,1990 **** assert_false(exists('s:somevar')) unlet! s:somevar ! CheckDefExecFailure([ 'var dd = 111', 'unlet dd', ], 'E1081:', 2) --- 1984,1990 ---- assert_false(exists('s:somevar')) unlet! s:somevar ! v9.CheckDefExecFailure([ 'var dd = 111', 'unlet dd', ], 'E1081:', 2) *************** *** 2013,2053 **** unlet ll[-2 : -1] assert_equal([1, 2], ll) ! CheckDefFailure([ 'var ll = [1, 2]', 'll[1 : 2] = 7', ], 'E1012: Type mismatch; expected list but got number', 2) ! CheckDefFailure([ 'var dd = {a: 1}', 'unlet dd["a" : "a"]', ], 'E1166:', 2) ! CheckDefExecFailure([ 'unlet g:adict[0 : 1]', ], 'E1148:', 1) ! CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll[0:1]', ], 'E1004:', 2) ! CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll[0 :1]', ], 'E1004:', 2) ! CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll[0: 1]', ], 'E1004:', 2) # command recognized as assignment when skipping, should not give an error ! CheckScriptSuccess([ 'vim9script', 'for i in []', " put =''", 'endfor']) ! CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll["x" : 1]', ], 'E1012:', 2) ! CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll[0 : "x"]', ], 'E1012:', 2) --- 2013,2053 ---- unlet ll[-2 : -1] assert_equal([1, 2], ll) ! v9.CheckDefFailure([ 'var ll = [1, 2]', 'll[1 : 2] = 7', ], 'E1012: Type mismatch; expected list but got number', 2) ! v9.CheckDefFailure([ 'var dd = {a: 1}', 'unlet dd["a" : "a"]', ], 'E1166:', 2) ! v9.CheckDefExecFailure([ 'unlet g:adict[0 : 1]', ], 'E1148:', 1) ! v9.CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll[0:1]', ], 'E1004:', 2) ! v9.CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll[0 :1]', ], 'E1004:', 2) ! v9.CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll[0: 1]', ], 'E1004:', 2) # command recognized as assignment when skipping, should not give an error ! v9.CheckScriptSuccess([ 'vim9script', 'for i in []', " put =''", 'endfor']) ! v9.CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll["x" : 1]', ], 'E1012:', 2) ! v9.CheckDefFailure([ 'var ll = [1, 2]', 'unlet ll[0 : "x"]', ], 'E1012:', 2) *************** *** 2057,2083 **** unlet dl[0]['b'] assert_equal([{a: 1}, {c: 3}], dl) ! CheckDefExecFailure([ 'var ll = test_null_list()', 'unlet ll[0]', ], 'E684:', 2) ! CheckDefExecFailure([ 'var ll = [1]', 'unlet ll[2]', ], 'E684:', 2) ! CheckDefExecFailure([ 'var ll = [1]', 'unlet ll[g:astring]', ], 'E1012:', 2) ! CheckDefExecFailure([ 'var dd = test_null_dict()', 'unlet dd["a"]', ], 'E716:', 2) ! CheckDefExecFailure([ 'var dd = {a: 1}', 'unlet dd["b"]', ], 'E716:', 2) ! CheckDefExecFailure([ 'var dd = {a: 1}', 'unlet dd[g:alist]', ], 'E1105:', 2) --- 2057,2083 ---- unlet dl[0]['b'] assert_equal([{a: 1}, {c: 3}], dl) ! v9.CheckDefExecFailure([ 'var ll = test_null_list()', 'unlet ll[0]', ], 'E684:', 2) ! v9.CheckDefExecFailure([ 'var ll = [1]', 'unlet ll[2]', ], 'E684:', 2) ! v9.CheckDefExecFailure([ 'var ll = [1]', 'unlet ll[g:astring]', ], 'E1012:', 2) ! v9.CheckDefExecFailure([ 'var dd = test_null_dict()', 'unlet dd["a"]', ], 'E716:', 2) ! v9.CheckDefExecFailure([ 'var dd = {a: 1}', 'unlet dd["b"]', ], 'E716:', 2) ! v9.CheckDefExecFailure([ 'var dd = {a: 1}', 'unlet dd[g:alist]', ], 'E1105:', 2) *************** *** 2090,2106 **** unlet g:someDict assert_false(exists('g:someDict')) ! CheckScriptFailure([ 'vim9script', 'var svar = 123', 'unlet svar', ], 'E1081:') ! CheckScriptFailure([ 'vim9script', 'var svar = 123', 'unlet s:svar', ], 'E1081:') ! CheckScriptFailure([ 'vim9script', 'var svar = 123', 'def Func()', --- 2090,2106 ---- unlet g:someDict assert_false(exists('g:someDict')) ! v9.CheckScriptFailure([ 'vim9script', 'var svar = 123', 'unlet svar', ], 'E1081:') ! v9.CheckScriptFailure([ 'vim9script', 'var svar = 123', 'unlet s:svar', ], 'E1081:') ! v9.CheckScriptFailure([ 'vim9script', 'var svar = 123', 'def Func()', *************** *** 2108,2114 **** 'enddef', 'defcompile', ], 'E1081:') ! CheckScriptFailure([ 'vim9script', 'var svar = 123', 'func Func()', --- 2108,2114 ---- 'enddef', 'defcompile', ], 'E1081:') ! v9.CheckScriptFailure([ 'vim9script', 'var svar = 123', 'func Func()', *************** *** 2116,2122 **** 'endfunc', 'Func()', ], 'E1081:') ! CheckScriptFailure([ 'vim9script', 'var svar = 123', 'def Func()', --- 2116,2122 ---- 'endfunc', 'Func()', ], 'E1081:') ! v9.CheckScriptFailure([ 'vim9script', 'var svar = 123', 'def Func()', *************** *** 2125,2131 **** 'defcompile', ], 'E1081:') ! CheckScriptFailure([ 'vim9script', 'def Delcount(dict: dict)', ' unlet dict.count', --- 2125,2131 ---- 'defcompile', ], 'E1081:') ! v9.CheckScriptFailure([ 'vim9script', 'def Delcount(dict: dict)', ' unlet dict.count', *************** *** 2133,2139 **** 'Delcount(v:)', ], 'E742:') ! CheckScriptFailure([ 'vim9script', 'def DelChangedtick(dict: dict)', ' unlet dict.changedtick', --- 2133,2139 ---- 'Delcount(v:)', ], 'E742:') ! v9.CheckScriptFailure([ 'vim9script', 'def DelChangedtick(dict: dict)', ' unlet dict.changedtick', *************** *** 2150,2156 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1260:', 1) delete('XunletExport.vim') $ENVVAR = 'foobar' --- 2150,2156 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1260:', 1) delete('XunletExport.vim') $ENVVAR = 'foobar' *************** *** 2165,2190 **** var x = invalid echo x END ! CheckScriptFailureList(lines, ['E121:', 'E121:']) lines =<< trim END vim9script var x = 1 / 0 echo x END ! CheckScriptFailure(lines, 'E1154:') lines =<< trim END vim9script var x = 1 % 0 echo x END ! CheckScriptFailure(lines, 'E1154:') lines =<< trim END var x: string 'string' END ! CheckDefAndScriptFailure(lines, 'E488:') enddef --- 2165,2190 ---- var x = invalid echo x END ! v9.CheckScriptFailureList(lines, ['E121:', 'E121:']) lines =<< trim END vim9script var x = 1 / 0 echo x END ! v9.CheckScriptFailure(lines, 'E1154:') lines =<< trim END vim9script var x = 1 % 0 echo x END ! v9.CheckScriptFailure(lines, 'E1154:') lines =<< trim END var x: string 'string' END ! v9.CheckDefAndScriptFailure(lines, 'E488:') enddef *************** *** 2212,2218 **** assert_equal(1, x) assert_equal(2, y) END ! CheckDefAndScriptSuccess(lines) enddef def Test_assign_alt_buf_register() --- 2212,2218 ---- assert_equal(1, x) assert_equal(2, y) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_assign_alt_buf_register() *************** *** 2225,2231 **** @# = b2 assert_equal(b2, bufnr('#')) END ! CheckDefAndScriptSuccess(lines) enddef def Test_script_funcref_case() --- 2225,2231 ---- @# = b2 assert_equal(b2, bufnr('#')) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_script_funcref_case() *************** *** 2233,2257 **** var Len = (s: string): number => len(s) + 1 assert_equal(5, Len('asdf')) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var len = (s: string): number => len(s) + 1 END ! CheckDefAndScriptFailure(lines, 'E704:') lines =<< trim END vim9script var s:Len = (s: string): number => len(s) + 2 assert_equal(6, Len('asdf')) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script var s:len = (s: string): number => len(s) + 1 END ! CheckScriptFailure(lines, 'E704:') enddef def Test_script_funcref_runtime_type_check() --- 2233,2257 ---- var Len = (s: string): number => len(s) + 1 assert_equal(5, Len('asdf')) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var len = (s: string): number => len(s) + 1 END ! v9.CheckDefAndScriptFailure(lines, 'E704:') lines =<< trim END vim9script var s:Len = (s: string): number => len(s) + 2 assert_equal(6, Len('asdf')) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script var s:len = (s: string): number => len(s) + 1 END ! v9.CheckScriptFailure(lines, 'E704:') enddef def Test_script_funcref_runtime_type_check() *************** *** 2265,2274 **** defcompile END # OK at compile time ! CheckScriptSuccess(lines) # Type check fails at runtime ! CheckScriptFailure(lines + ['Test()'], 'E1012: Type mismatch; expected func(string) but got func(number)') enddef def Test_inc_dec() --- 2265,2274 ---- defcompile END # OK at compile time ! v9.CheckScriptSuccess(lines) # Type check fails at runtime ! v9.CheckScriptFailure(lines + ['Test()'], 'E1012: Type mismatch; expected func(string) but got func(number)') enddef def Test_inc_dec() *************** *** 2294,2306 **** assert_equal(1, g:count) unlet g:count END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var nr = 7 ++ nr END ! CheckDefAndScriptFailure(lines, "E1202: No white space allowed after '++': ++ nr") enddef def Test_abort_after_error() --- 2294,2306 ---- assert_equal(1, g:count) unlet g:count END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var nr = 7 ++ nr END ! v9.CheckDefAndScriptFailure(lines, "E1202: No white space allowed after '++': ++ nr") enddef def Test_abort_after_error() *************** *** 2325,2337 **** def Run_Test_declare_command_line() # On the command line the type is parsed but not used. # To get rid of the script context have to run this in another Vim instance. ! var buf = RunVimInTerminal('', {'rows': 6}) term_sendkeys(buf, ":vim9 var abc: list> = [ [1, 2, 3], [4, 5, 6] ]\") ! TermWait(buf) term_sendkeys(buf, ":echo abc\") ! TermWait(buf) ! WaitForAssert(() => assert_match('\[\[1, 2, 3\], \[4, 5, 6\]\]', term_getline(buf, 6))) ! StopVimInTerminal(buf) enddef --- 2325,2337 ---- def Run_Test_declare_command_line() # On the command line the type is parsed but not used. # To get rid of the script context have to run this in another Vim instance. ! var buf = g:RunVimInTerminal('', {'rows': 6}) term_sendkeys(buf, ":vim9 var abc: list> = [ [1, 2, 3], [4, 5, 6] ]\") ! g:TermWait(buf) term_sendkeys(buf, ":echo abc\") ! g:TermWait(buf) ! g:WaitForAssert(() => assert_match('\[\[1, 2, 3\], \[4, 5, 6\]\]', term_getline(buf, 6))) ! g:StopVimInTerminal(buf) enddef *** ../vim-8.2.4256/src/testdir/test_vim9_builtin.vim 2022-01-27 16:36:25.419543625 +0000 --- src/testdir/test_vim9_builtin.vim 2022-01-29 18:11:08.347243065 +0000 *************** *** 1,7 **** " Test using builtin functions in the Vim9 script language. source check.vim ! source vim9.vim " Test for passing too many or too few arguments to builtin functions func Test_internalfunc_arg_error() --- 1,7 ---- " Test using builtin functions in the Vim9 script language. source check.vim ! import './vim9.vim' as v9 " Test for passing too many or too few arguments to builtin functions func Test_internalfunc_arg_error() *************** *** 67,73 **** assert_equal(0, abs(0)) assert_equal(2, abs(-2)) assert_equal(3, abs(3)) ! CheckDefAndScriptFailure(['abs("text")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) if has('float') assert_equal(0, abs(0)) assert_equal(2.0, abs(-2.0)) --- 67,73 ---- assert_equal(0, abs(0)) assert_equal(2, abs(-2)) assert_equal(3, abs(3)) ! v9.CheckDefAndScriptFailure(['abs("text")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) if has('float') assert_equal(0, abs(0)) assert_equal(2.0, abs(-2.0)) *************** *** 76,83 **** enddef def Test_add() ! CheckDefAndScriptFailure(['add({}, 1)'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1226: List or Blob required for argument 1']) ! CheckDefFailure(['add([1], "a")'], 'E1012: Type mismatch; expected number but got string') var lines =<< trim END vim9script --- 76,83 ---- enddef def Test_add() ! v9.CheckDefAndScriptFailure(['add({}, 1)'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1226: List or Blob required for argument 1']) ! v9.CheckDefFailure(['add([1], "a")'], 'E1012: Type mismatch; expected number but got string') var lines =<< trim END vim9script *************** *** 88,94 **** enddef TryChange() END ! CheckScriptFailure(lines, 'E741:') enddef def Test_add_blob() --- 88,94 ---- enddef TryChange() END ! v9.CheckScriptFailure(lines, 'E741:') enddef def Test_add_blob() *************** *** 104,121 **** var b: blob add(b, "x") END ! CheckDefFailure(lines, 'E1012:', 2) lines =<< trim END add(test_null_blob(), 123) END ! CheckDefExecAndScriptFailure(lines, 'E1131:', 1) lines =<< trim END var b: blob = test_null_blob() add(b, 123) END ! CheckDefExecFailure(lines, 'E1131:', 2) # Getting variable with NULL blob allocates a new blob at script level lines =<< trim END --- 104,121 ---- var b: blob add(b, "x") END ! v9.CheckDefFailure(lines, 'E1012:', 2) lines =<< trim END add(test_null_blob(), 123) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1131:', 1) lines =<< trim END var b: blob = test_null_blob() add(b, 123) END ! v9.CheckDefExecFailure(lines, 'E1131:', 2) # Getting variable with NULL blob allocates a new blob at script level lines =<< trim END *************** *** 123,129 **** var b: blob = test_null_blob() add(b, 123) END ! CheckScriptSuccess(lines) enddef def Test_add_list() --- 123,129 ---- var b: blob = test_null_blob() add(b, 123) END ! v9.CheckScriptSuccess(lines) enddef def Test_add_list() *************** *** 135,152 **** var l: list add(l, "x") END ! CheckDefFailure(lines, 'E1012:', 2) lines =<< trim END add(test_null_list(), 123) END ! CheckDefExecAndScriptFailure(lines, 'E1130:', 1) lines =<< trim END var l: list = test_null_list() add(l, 123) END ! CheckDefExecFailure(lines, 'E1130:', 2) # Getting variable with NULL list allocates a new list at script level lines =<< trim END --- 135,152 ---- var l: list add(l, "x") END ! v9.CheckDefFailure(lines, 'E1012:', 2) lines =<< trim END add(test_null_list(), 123) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1130:', 1) lines =<< trim END var l: list = test_null_list() add(l, 123) END ! v9.CheckDefExecFailure(lines, 'E1130:', 2) # Getting variable with NULL list allocates a new list at script level lines =<< trim END *************** *** 154,179 **** var l: list = test_null_list() add(l, 123) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script var l: list = ['a'] l->add(123) END ! CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3) lines =<< trim END vim9script var l: list l->add(123) END ! CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3) enddef def Test_and() ! CheckDefAndScriptFailure(['and("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['and(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_append() --- 154,179 ---- var l: list = test_null_list() add(l, 123) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script var l: list = ['a'] l->add(123) END ! v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3) lines =<< trim END vim9script var l: list l->add(123) END ! v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3) enddef def Test_and() ! v9.CheckDefAndScriptFailure(['and("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['and(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_append() *************** *** 191,202 **** assert_equal("{'a': 10}", getline(1)) append(0, function('min')) assert_equal("function('min')", getline(1)) ! CheckDefAndScriptFailure(['append([1], "x")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['append("", "x")'], 'E1209: Invalid value for a line number') ! CheckDefExecAndScriptFailure(['append(".a", "x")'], 'E1209: Invalid value for a line number') # only get one error assert_fails('append("''aa", "x")', ['E1209: Invalid value for a line number: "''aa"', 'E1209:']) ! CheckDefExecAndScriptFailure(['append(-1, "x")'], 'E966: Invalid line number: -1') bwipe! enddef --- 191,202 ---- assert_equal("{'a': 10}", getline(1)) append(0, function('min')) assert_equal("function('min')", getline(1)) ! v9.CheckDefAndScriptFailure(['append([1], "x")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['append("", "x")'], 'E1209: Invalid value for a line number') ! v9.CheckDefExecAndScriptFailure(['append(".a", "x")'], 'E1209: Invalid value for a line number') # only get one error assert_fails('append("''aa", "x")', ['E1209: Invalid value for a line number: "''aa"', 'E1209:']) ! v9.CheckDefExecAndScriptFailure(['append(-1, "x")'], 'E966: Invalid line number: -1') bwipe! enddef *************** *** 212,223 **** assert_equal(['0', 'one', '1', 'two', '2', ''], getbufline(bnum, 1, '$')) appendbufline(bnum, 0, 'zero') assert_equal(['zero'], getbufline(bnum, 1)) ! CheckDefAndScriptFailure(['appendbufline([1], 1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['appendbufline(1, [1], "x")'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) ! CheckDefExecAndScriptFailure(['appendbufline(' .. bnum .. ', -1, "x")'], 'E966: Invalid line number: -1') ! CheckDefExecAndScriptFailure(['appendbufline(' .. bnum .. ', "$a", "x")'], 'E1030: Using a String as a Number: "$a"') assert_fails('appendbufline(' .. bnum .. ', "$a", "x")', ['E1030: Using a String as a Number: "$a"', 'E1030:']) ! CheckDefAndScriptFailure(['appendbufline(1, 1, {"a": 10})'], ['E1013: Argument 3: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 3']) bnum->bufwinid()->win_gotoid() appendbufline('', 0, 'numbers') getline(1)->assert_equal('numbers') --- 212,223 ---- assert_equal(['0', 'one', '1', 'two', '2', ''], getbufline(bnum, 1, '$')) appendbufline(bnum, 0, 'zero') assert_equal(['zero'], getbufline(bnum, 1)) ! v9.CheckDefAndScriptFailure(['appendbufline([1], 1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['appendbufline(1, [1], "x")'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['appendbufline(' .. bnum .. ', -1, "x")'], 'E966: Invalid line number: -1') ! v9.CheckDefExecAndScriptFailure(['appendbufline(' .. bnum .. ', "$a", "x")'], 'E1030: Using a String as a Number: "$a"') assert_fails('appendbufline(' .. bnum .. ', "$a", "x")', ['E1030: Using a String as a Number: "$a"', 'E1030:']) ! v9.CheckDefAndScriptFailure(['appendbufline(1, 1, {"a": 10})'], ['E1013: Argument 3: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 3']) bnum->bufwinid()->win_gotoid() appendbufline('', 0, 'numbers') getline(1)->assert_equal('numbers') *************** *** 225,292 **** enddef def Test_argc() ! CheckDefAndScriptFailure(['argc("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_arglistid() ! CheckDefAndScriptFailure(['arglistid("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['arglistid(1, "y")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['arglistid("x", "y")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_argv() ! CheckDefAndScriptFailure(['argv("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['argv(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['argv("x", "y")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_assert_beeps() ! CheckDefAndScriptFailure(['assert_beeps(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) enddef def Test_assert_equalfile() ! CheckDefAndScriptFailure(['assert_equalfile(1, "f2")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['assert_equalfile("f1", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['assert_equalfile("f1", "f2", ["a"])'], ['E1013: Argument 3: type mismatch, expected string but got list', 'E1174: String required for argument 3']) enddef def Test_assert_exception() ! CheckDefAndScriptFailure(['assert_exception({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['assert_exception("E1:", v:null)'], ['E1013: Argument 2: type mismatch, expected string but got special', 'E1174: String required for argument 2']) enddef def Test_assert_fails() ! CheckDefAndScriptFailure(['assert_fails([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['assert_fails("a", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1222: String or List required for argument 2']) ! CheckDefAndScriptFailure(['assert_fails("a", "b", "c", "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) ! CheckDefAndScriptFailure(['assert_fails("a", "b", "c", 4, 5)'], ['E1013: Argument 5: type mismatch, expected string but got number', 'E1174: String required for argument 5']) enddef def Test_assert_inrange() ! CheckDefAndScriptFailure(['assert_inrange("a", 2, 3)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) ! CheckDefAndScriptFailure(['assert_inrange(1, "b", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2']) ! CheckDefAndScriptFailure(['assert_inrange(1, 2, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 3']) ! CheckDefAndScriptFailure(['assert_inrange(1, 2, 3, 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4']) enddef def Test_assert_match() ! CheckDefAndScriptFailure(['assert_match({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', '']) ! CheckDefAndScriptFailure(['assert_match("a", 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', '']) ! CheckDefAndScriptFailure(['assert_match("a", "b", null)'], ['E1013: Argument 3: type mismatch, expected string but got special', '']) enddef def Test_assert_nobeep() ! CheckDefAndScriptFailure(['assert_nobeep(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) enddef def Test_assert_notmatch() ! CheckDefAndScriptFailure(['assert_notmatch({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', '']) ! CheckDefAndScriptFailure(['assert_notmatch("a", 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', '']) ! CheckDefAndScriptFailure(['assert_notmatch("a", "b", null)'], ['E1013: Argument 3: type mismatch, expected string but got special', '']) enddef def Test_assert_report() ! CheckDefAndScriptFailure(['assert_report([1, 2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_balloon_show() --- 225,292 ---- enddef def Test_argc() ! v9.CheckDefAndScriptFailure(['argc("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_arglistid() ! v9.CheckDefAndScriptFailure(['arglistid("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['arglistid(1, "y")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['arglistid("x", "y")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_argv() ! v9.CheckDefAndScriptFailure(['argv("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['argv(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['argv("x", "y")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_assert_beeps() ! v9.CheckDefAndScriptFailure(['assert_beeps(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) enddef def Test_assert_equalfile() ! v9.CheckDefAndScriptFailure(['assert_equalfile(1, "f2")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['assert_equalfile("f1", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['assert_equalfile("f1", "f2", ["a"])'], ['E1013: Argument 3: type mismatch, expected string but got list', 'E1174: String required for argument 3']) enddef def Test_assert_exception() ! v9.CheckDefAndScriptFailure(['assert_exception({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['assert_exception("E1:", v:null)'], ['E1013: Argument 2: type mismatch, expected string but got special', 'E1174: String required for argument 2']) enddef def Test_assert_fails() ! v9.CheckDefAndScriptFailure(['assert_fails([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['assert_fails("a", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1222: String or List required for argument 2']) ! v9.CheckDefAndScriptFailure(['assert_fails("a", "b", "c", "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) ! v9.CheckDefAndScriptFailure(['assert_fails("a", "b", "c", 4, 5)'], ['E1013: Argument 5: type mismatch, expected string but got number', 'E1174: String required for argument 5']) enddef def Test_assert_inrange() ! v9.CheckDefAndScriptFailure(['assert_inrange("a", 2, 3)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['assert_inrange(1, "b", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['assert_inrange(1, 2, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['assert_inrange(1, 2, 3, 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4']) enddef def Test_assert_match() ! v9.CheckDefAndScriptFailure(['assert_match({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', '']) ! v9.CheckDefAndScriptFailure(['assert_match("a", 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', '']) ! v9.CheckDefAndScriptFailure(['assert_match("a", "b", null)'], ['E1013: Argument 3: type mismatch, expected string but got special', '']) enddef def Test_assert_nobeep() ! v9.CheckDefAndScriptFailure(['assert_nobeep(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) enddef def Test_assert_notmatch() ! v9.CheckDefAndScriptFailure(['assert_notmatch({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', '']) ! v9.CheckDefAndScriptFailure(['assert_notmatch("a", 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', '']) ! v9.CheckDefAndScriptFailure(['assert_notmatch("a", "b", null)'], ['E1013: Argument 3: type mismatch, expected string but got special', '']) enddef def Test_assert_report() ! v9.CheckDefAndScriptFailure(['assert_report([1, 2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_balloon_show() *************** *** 296,303 **** assert_fails('balloon_show(10)', 'E1222:') assert_fails('balloon_show(true)', 'E1222:') ! CheckDefAndScriptFailure(['balloon_show(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['balloon_show({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) enddef def Test_balloon_split() --- 296,303 ---- assert_fails('balloon_show(10)', 'E1222:') assert_fails('balloon_show(true)', 'E1222:') ! v9.CheckDefAndScriptFailure(['balloon_show(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['balloon_show({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) enddef def Test_balloon_split() *************** *** 308,329 **** enddef def Test_blob2list() ! CheckDefAndScriptFailure(['blob2list(10)'], ['E1013: Argument 1: type mismatch, expected blob but got number', 'E1238: Blob required for argument 1']) enddef def Test_browse() CheckFeature browse ! CheckDefAndScriptFailure(['browse(2, "title", "dir", "file")'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) ! CheckDefAndScriptFailure(['browse(true, 2, "dir", "file")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['browse(true, "title", 3, "file")'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) ! CheckDefAndScriptFailure(['browse(true, "title", "dir", 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4']) enddef def Test_browsedir() if has('browse') ! CheckDefAndScriptFailure(['browsedir({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['browsedir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) endif enddef --- 308,329 ---- enddef def Test_blob2list() ! v9.CheckDefAndScriptFailure(['blob2list(10)'], ['E1013: Argument 1: type mismatch, expected blob but got number', 'E1238: Blob required for argument 1']) enddef def Test_browse() CheckFeature browse ! v9.CheckDefAndScriptFailure(['browse(2, "title", "dir", "file")'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) ! v9.CheckDefAndScriptFailure(['browse(true, 2, "dir", "file")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['browse(true, "title", 3, "file")'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) ! v9.CheckDefAndScriptFailure(['browse(true, "title", "dir", 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4']) enddef def Test_browsedir() if has('browse') ! v9.CheckDefAndScriptFailure(['browsedir({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['browsedir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) endif enddef *************** *** 372,379 **** buf = bufnr('Xdummy', true) buf->assert_notequal(-1) exe 'bwipe! ' .. buf ! CheckDefAndScriptFailure(['bufnr([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['bufnr(1, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) enddef def Test_bufwinid() --- 372,379 ---- buf = bufnr('Xdummy', true) buf->assert_notequal(-1) exe 'bwipe! ' .. buf ! v9.CheckDefAndScriptFailure(['bufnr([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['bufnr(1, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) enddef def Test_bufwinid() *************** *** 399,419 **** enddef def Test_byte2line() ! CheckDefAndScriptFailure(['byte2line("1")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['byteidx(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['byteidxcomp(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['byteidxcomp("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_call_call() --- 399,419 ---- enddef def Test_byte2line() ! v9.CheckDefAndScriptFailure(['byte2line("1")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['byteidx(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['byteidxcomp(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['byteidxcomp("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_call_call() *************** *** 421,437 **** call('reverse', [l]) l->assert_equal([1, 2, 3]) ! CheckDefExecAndScriptFailure(['call(123, [2])'], 'E1256: String or function required for argument 1') ! CheckDefExecAndScriptFailure(['call(true, [2])'], 'E1256: String or function required for argument 1') ! CheckDefAndScriptFailure(['call("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! CheckDefAndScriptFailure(['call("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_ch_canread() if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_canread(10)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) endif enddef --- 421,437 ---- call('reverse', [l]) l->assert_equal([1, 2, 3]) ! v9.CheckDefExecAndScriptFailure(['call(123, [2])'], 'E1256: String or function required for argument 1') ! v9.CheckDefExecAndScriptFailure(['call(true, [2])'], 'E1256: String or function required for argument 1') ! v9.CheckDefAndScriptFailure(['call("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! v9.CheckDefAndScriptFailure(['call("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_ch_canread() if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_canread(10)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) endif enddef *************** *** 439,445 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_close("c")'], ['E1013: Argument 1: type mismatch, expected channel but got string', 'E1217: Channel or Job required for argument 1']) endif enddef --- 439,445 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_close("c")'], ['E1013: Argument 1: type mismatch, expected channel but got string', 'E1217: Channel or Job required for argument 1']) endif enddef *************** *** 447,453 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_close_in(true)'], ['E1013: Argument 1: type mismatch, expected channel but got bool', 'E1217: Channel or Job required for argument 1']) endif enddef --- 447,453 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_close_in(true)'], ['E1013: Argument 1: type mismatch, expected channel but got bool', 'E1217: Channel or Job required for argument 1']) endif enddef *************** *** 455,462 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_evalexpr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_evalexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) endif enddef --- 455,462 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_evalexpr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_evalexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) endif enddef *************** *** 464,472 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_evalraw(1, "")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2']) ! CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) endif enddef --- 464,472 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_evalraw(1, "")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2']) ! v9.CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) endif enddef *************** *** 474,481 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_getbufnr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_getbufnr(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) # test empty string argument for ch_getbufnr() var job: job = job_start(&shell) job->ch_getbufnr('')->assert_equal(-1) --- 474,481 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_getbufnr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_getbufnr(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) # test empty string argument for ch_getbufnr() var job: job = job_start(&shell) job->ch_getbufnr('')->assert_equal(-1) *************** *** 487,494 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_getjob(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_getjob({"a": 10})'], ['E1013: Argument 1: type mismatch, expected channel but got dict', 'E1217: Channel or Job required for argument 1']) assert_equal(0, ch_getjob(test_null_channel())) endif enddef --- 487,494 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_getjob(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_getjob({"a": 10})'], ['E1013: Argument 1: type mismatch, expected channel but got dict', 'E1217: Channel or Job required for argument 1']) assert_equal(0, ch_getjob(test_null_channel())) endif enddef *************** *** 497,503 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_info([1])'], ['E1013: Argument 1: type mismatch, expected channel but got list', 'E1217: Channel or Job required for argument 1']) endif enddef --- 497,503 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_info([1])'], ['E1013: Argument 1: type mismatch, expected channel but got list', 'E1217: Channel or Job required for argument 1']) endif enddef *************** *** 505,512 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_log(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['ch_log("a", 1)'], ['E1013: Argument 2: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 2']) endif enddef --- 505,512 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_log(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_log("a", 1)'], ['E1013: Argument 2: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 2']) endif enddef *************** *** 518,525 **** assert_fails('ch_logfile("foo", true)', 'E1174:') ch_logfile('', '')->assert_equal(0) ! CheckDefAndScriptFailure(['ch_logfile(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['ch_logfile("a", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2']) endif enddef --- 518,525 ---- assert_fails('ch_logfile("foo", true)', 'E1174:') ch_logfile('', '')->assert_equal(0) ! v9.CheckDefAndScriptFailure(['ch_logfile(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_logfile("a", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2']) endif enddef *************** *** 527,535 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_open({"a": 10}, "a")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['ch_open("a", [1])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! CheckDefExecAndScriptFailure(['ch_open("")'], 'E475: Invalid argument') endif enddef --- 527,535 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_open({"a": 10}, "a")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_open("a", [1])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['ch_open("")'], 'E475: Invalid argument') endif enddef *************** *** 537,544 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_read(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_read(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef --- 537,544 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_read(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_read(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef *************** *** 546,553 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_readblob(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_readblob(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef --- 546,553 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_readblob(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_readblob(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef *************** *** 555,562 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_readraw(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_readraw(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef --- 555,562 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_readraw(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_readraw(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef *************** *** 564,571 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_sendexpr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_sendexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) endif enddef --- 564,571 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_sendexpr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_sendexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) endif enddef *************** *** 573,581 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_sendraw(1, "")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2']) ! CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) endif enddef --- 573,581 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_sendraw(1, "")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2']) ! v9.CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) endif enddef *************** *** 583,590 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_setoptions(1, {})'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_setoptions(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef --- 583,590 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_setoptions(1, {})'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_setoptions(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef *************** *** 592,599 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['ch_status(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! CheckDefAndScriptFailure(['ch_status(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef --- 592,599 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['ch_status(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['ch_status(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) endif enddef *************** *** 601,608 **** char2nr('あ', true)->assert_equal(12354) assert_fails('char2nr(true)', 'E1174:') ! CheckDefAndScriptFailure(['char2nr(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['char2nr("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) assert_equal(97, char2nr('a', 1)) assert_equal(97, char2nr('a', 0)) assert_equal(97, char2nr('a', true)) --- 601,608 ---- char2nr('あ', true)->assert_equal(12354) assert_fails('char2nr(true)', 'E1174:') ! v9.CheckDefAndScriptFailure(['char2nr(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['char2nr("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) assert_equal(97, char2nr('a', 1)) assert_equal(97, char2nr('a', 0)) assert_equal(97, char2nr('a', true)) *************** *** 616,624 **** enddef def Test_charcol() ! CheckDefAndScriptFailure(['charcol(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['charcol({a: 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! CheckDefExecAndScriptFailure(['charcol("")'], 'E1209: Invalid value for a line number') new setline(1, ['abcdefgh']) cursor(1, 4) --- 616,624 ---- enddef def Test_charcol() ! v9.CheckDefAndScriptFailure(['charcol(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['charcol({a: 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['charcol("")'], 'E1209: Invalid value for a line number') new setline(1, ['abcdefgh']) cursor(1, 4) *************** *** 629,637 **** enddef def Test_charidx() ! CheckDefAndScriptFailure(['charidx(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['charidx("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['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 --- 629,637 ---- enddef def Test_charidx() ! v9.CheckDefAndScriptFailure(['charidx(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['charidx("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['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 *************** *** 641,655 **** enddef def Test_cindent() ! CheckDefAndScriptFailure(['cindent([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['cindent(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['cindent("")'], 'E1209: Invalid value for a line number') assert_equal(-1, cindent(0)) assert_equal(0, cindent('.')) enddef def Test_clearmatches() ! CheckDefAndScriptFailure(['clearmatches("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_col() --- 641,655 ---- enddef def Test_cindent() ! v9.CheckDefAndScriptFailure(['cindent([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['cindent(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['cindent("")'], 'E1209: Invalid value for a line number') assert_equal(-1, cindent(0)) assert_equal(0, cindent('.')) enddef def Test_clearmatches() ! v9.CheckDefAndScriptFailure(['clearmatches("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_col() *************** *** 662,686 **** assert_fails('col(true)', 'E1222:') ! CheckDefAndScriptFailure(['col(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['col({a: 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['col(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1222: String or List required for argument 1']) ! CheckDefExecAndScriptFailure(['col("")'], 'E1209: Invalid value for a line number') bw! enddef def Test_complete() ! CheckDefAndScriptFailure(['complete("1", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['complete(1, {})'], ['E1013: Argument 2: type mismatch, expected list but got dict', 'E1211: List required for argument 2']) enddef def Test_complete_add() ! CheckDefAndScriptFailure(['complete_add([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1223: String or Dictionary required for argument 1']) enddef def Test_complete_info() ! CheckDefAndScriptFailure(['complete_info("")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['complete_info({})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info()) assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items'])) enddef --- 662,686 ---- assert_fails('col(true)', 'E1222:') ! v9.CheckDefAndScriptFailure(['col(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['col({a: 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['col(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1222: String or List required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['col("")'], 'E1209: Invalid value for a line number') bw! enddef def Test_complete() ! v9.CheckDefAndScriptFailure(['complete("1", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['complete(1, {})'], ['E1013: Argument 2: type mismatch, expected list but got dict', 'E1211: List required for argument 2']) enddef def Test_complete_add() ! v9.CheckDefAndScriptFailure(['complete_add([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1223: String or Dictionary required for argument 1']) enddef def Test_complete_info() ! v9.CheckDefAndScriptFailure(['complete_info("")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['complete_info({})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info()) assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items'])) enddef *************** *** 693,702 **** assert_fails('confirm(true)', 'E1174:') assert_fails('confirm("yes", true)', 'E1174:') assert_fails('confirm("yes", "maybe", 2, true)', 'E1174:') ! CheckDefAndScriptFailure(['confirm(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['confirm("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['confirm("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['confirm("a", "b", 3, 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4']) enddef def Test_copy_return_type() --- 693,702 ---- assert_fails('confirm(true)', 'E1174:') assert_fails('confirm("yes", true)', 'E1174:') assert_fails('confirm("yes", "maybe", 2, true)', 'E1174:') ! v9.CheckDefAndScriptFailure(['confirm(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['confirm("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['confirm("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['confirm("a", "b", 3, 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4']) enddef def Test_copy_return_type() *************** *** 720,728 **** def Test_count() count('ABC ABC ABC', 'b', true)->assert_equal(3) count('ABC ABC ABC', 'b', false)->assert_equal(0) ! CheckDefAndScriptFailure(['count(10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1225: String, List or Dictionary required for argument 1']) ! CheckDefAndScriptFailure(['count("a", [1], 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) ! CheckDefAndScriptFailure(['count("a", [1], 0, "b")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) count([1, 2, 2, 3], 2)->assert_equal(2) count([1, 2, 2, 3], 2, false, 2)->assert_equal(1) count({a: 1.1, b: 2.2, c: 1.1}, 1.1)->assert_equal(2) --- 720,728 ---- def Test_count() count('ABC ABC ABC', 'b', true)->assert_equal(3) count('ABC ABC ABC', 'b', false)->assert_equal(0) ! v9.CheckDefAndScriptFailure(['count(10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1225: String, List or Dictionary required for argument 1']) ! v9.CheckDefAndScriptFailure(['count("a", [1], 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) ! v9.CheckDefAndScriptFailure(['count("a", [1], 0, "b")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) count([1, 2, 2, 3], 2)->assert_equal(2) count([1, 2, 2, 3], 2, false, 2)->assert_equal(1) count({a: 1.1, b: 2.2, c: 1.1}, 1.1)->assert_equal(2) *************** *** 731,739 **** def Test_cscope_connection() CheckFeature cscope assert_equal(0, cscope_connection()) ! CheckDefAndScriptFailure(['cscope_connection("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['cscope_connection(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['cscope_connection(1, "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_cursor() --- 731,739 ---- def Test_cscope_connection() CheckFeature cscope assert_equal(0, cscope_connection()) ! v9.CheckDefAndScriptFailure(['cscope_connection("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['cscope_connection(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['cscope_connection(1, "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_cursor() *************** *** 749,783 **** var lines =<< trim END cursor('2', 1) END ! CheckDefExecAndScriptFailure(lines, 'E1209:') ! CheckDefAndScriptFailure(['cursor(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1']) ! CheckDefAndScriptFailure(['cursor(1, "2")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['cursor(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefExecAndScriptFailure(['cursor("", 2)'], 'E1209: Invalid value for a line number') enddef def Test_debugbreak() CheckMSWindows ! CheckDefAndScriptFailure(['debugbreak("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_deepcopy() ! CheckDefAndScriptFailure(['deepcopy({}, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) enddef def Test_delete() var res: bool = delete('doesnotexist') assert_equal(true, res) ! CheckDefAndScriptFailure(['delete(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['delete("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefExecAndScriptFailure(['delete("")'], 'E474: Invalid argument') enddef def Test_deletebufline() ! CheckDefAndScriptFailure(['deletebufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['deletebufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) ! CheckDefAndScriptFailure(['deletebufline("a", 2, 0z10)'], ['E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3']) new setline(1, ['one', 'two']) deletebufline('', 1) --- 749,783 ---- var lines =<< trim END cursor('2', 1) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1209:') ! v9.CheckDefAndScriptFailure(['cursor(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['cursor(1, "2")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['cursor(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefExecAndScriptFailure(['cursor("", 2)'], 'E1209: Invalid value for a line number') enddef def Test_debugbreak() CheckMSWindows ! v9.CheckDefAndScriptFailure(['debugbreak("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_deepcopy() ! v9.CheckDefAndScriptFailure(['deepcopy({}, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) enddef def Test_delete() var res: bool = delete('doesnotexist') assert_equal(true, res) ! v9.CheckDefAndScriptFailure(['delete(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['delete("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['delete("")'], 'E474: Invalid argument') enddef def Test_deletebufline() ! v9.CheckDefAndScriptFailure(['deletebufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['deletebufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['deletebufline("a", 2, 0z10)'], ['E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3']) new setline(1, ['one', 'two']) deletebufline('', 1) *************** *** 790,847 **** enddef def Test_diff_filler() ! CheckDefAndScriptFailure(['diff_filler([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['diff_filler(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['diff_filler("")'], 'E1209: Invalid value for a line number') assert_equal(0, diff_filler(1)) assert_equal(0, diff_filler('.')) enddef def Test_diff_hlID() ! CheckDefAndScriptFailure(['diff_hlID(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['diff_hlID(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefExecAndScriptFailure(['diff_hlID("", 10)'], 'E1209: Invalid value for a line number') enddef def Test_digraph_get() ! CheckDefAndScriptFailure(['digraph_get(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefExecAndScriptFailure(['digraph_get("")'], 'E1214: Digraph must be just two characters') enddef def Test_digraph_getlist() ! CheckDefAndScriptFailure(['digraph_getlist(10)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) ! CheckDefAndScriptFailure(['digraph_getlist("")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) enddef def Test_digraph_set() ! CheckDefAndScriptFailure(['digraph_set(10, "a")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['digraph_set("ab", 0z10)'], ['E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2']) ! CheckDefExecAndScriptFailure(['digraph_set("", "a")'], 'E1214: Digraph must be just two characters') enddef def Test_digraph_setlist() ! CheckDefAndScriptFailure(['digraph_setlist("a")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1216: digraph_setlist() argument must be a list of lists with two items']) ! CheckDefAndScriptFailure(['digraph_setlist({})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1216: digraph_setlist() argument must be a list of lists with two items']) enddef def Test_echoraw() ! CheckDefAndScriptFailure(['echoraw(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['echoraw(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_escape() ! CheckDefAndScriptFailure(['escape(10, " ")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['escape(true, false)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['escape("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_equal('a\:b', escape("a:b", ":")) escape('abc', '')->assert_equal('abc') escape('', ':')->assert_equal('') enddef def Test_eval() ! CheckDefAndScriptFailure(['eval(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['eval(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1']) ! CheckDefExecAndScriptFailure(['eval("")'], 'E15: Invalid expression') assert_equal(2, eval('1 + 1')) enddef --- 790,847 ---- enddef def Test_diff_filler() ! v9.CheckDefAndScriptFailure(['diff_filler([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['diff_filler(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['diff_filler("")'], 'E1209: Invalid value for a line number') assert_equal(0, diff_filler(1)) assert_equal(0, diff_filler('.')) enddef def Test_diff_hlID() ! v9.CheckDefAndScriptFailure(['diff_hlID(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['diff_hlID(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['diff_hlID("", 10)'], 'E1209: Invalid value for a line number') enddef def Test_digraph_get() ! v9.CheckDefAndScriptFailure(['digraph_get(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['digraph_get("")'], 'E1214: Digraph must be just two characters') enddef def Test_digraph_getlist() ! v9.CheckDefAndScriptFailure(['digraph_getlist(10)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) ! v9.CheckDefAndScriptFailure(['digraph_getlist("")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) enddef def Test_digraph_set() ! v9.CheckDefAndScriptFailure(['digraph_set(10, "a")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['digraph_set("ab", 0z10)'], ['E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['digraph_set("", "a")'], 'E1214: Digraph must be just two characters') enddef def Test_digraph_setlist() ! v9.CheckDefAndScriptFailure(['digraph_setlist("a")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1216: digraph_setlist() argument must be a list of lists with two items']) ! v9.CheckDefAndScriptFailure(['digraph_setlist({})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1216: digraph_setlist() argument must be a list of lists with two items']) enddef def Test_echoraw() ! v9.CheckDefAndScriptFailure(['echoraw(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['echoraw(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_escape() ! v9.CheckDefAndScriptFailure(['escape(10, " ")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['escape(true, false)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['escape("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_equal('a\:b', escape("a:b", ":")) escape('abc', '')->assert_equal('abc') escape('', ':')->assert_equal('') enddef def Test_eval() ! v9.CheckDefAndScriptFailure(['eval(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['eval(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['eval("")'], 'E15: Invalid expression') assert_equal(2, eval('1 + 1')) enddef *************** *** 849,856 **** assert_false(executable("")) assert_false(executable(test_null_string())) ! CheckDefExecFailure(['echo executable(123)'], 'E1013:') ! CheckDefExecFailure(['echo executable(true)'], 'E1013:') enddef def Test_execute() --- 849,856 ---- assert_false(executable("")) assert_false(executable(test_null_string())) ! v9.CheckDefExecFailure(['echo executable(123)'], 'E1013:') ! v9.CheckDefExecFailure(['echo executable(true)'], 'E1013:') enddef def Test_execute() *************** *** 859,880 **** res = execute(["echo 'here'", "echo 'there'"]) assert_equal("\nhere\nthere", res) ! CheckDefAndScriptFailure(['execute(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1']) ! CheckDefFailure(['execute([123])'], 'E1013: Argument 1: type mismatch, expected list but got list') ! CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492') ! CheckDefAndScriptFailure(['execute("xx", 123)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_exepath() ! CheckDefExecFailure(['echo exepath(true)'], 'E1013:') ! CheckDefExecFailure(['echo exepath(v:null)'], 'E1013:') ! CheckDefExecFailure(['echo exepath("")'], 'E1175:') enddef command DoSomeCommand let g:didSomeCommand = 4 def Test_exists() ! CheckDefAndScriptFailure(['exists(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) call assert_equal(1, exists('&tabstop')) var lines =<< trim END --- 859,880 ---- res = execute(["echo 'here'", "echo 'there'"]) assert_equal("\nhere\nthere", res) ! v9.CheckDefAndScriptFailure(['execute(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1']) ! v9.CheckDefFailure(['execute([123])'], 'E1013: Argument 1: type mismatch, expected list but got list') ! v9.CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492') ! v9.CheckDefAndScriptFailure(['execute("xx", 123)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_exepath() ! v9.CheckDefExecFailure(['echo exepath(true)'], 'E1013:') ! v9.CheckDefExecFailure(['echo exepath(v:null)'], 'E1013:') ! v9.CheckDefExecFailure(['echo exepath("")'], 'E1175:') enddef command DoSomeCommand let g:didSomeCommand = 4 def Test_exists() ! v9.CheckDefAndScriptFailure(['exists(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) call assert_equal(1, exists('&tabstop')) var lines =<< trim END *************** *** 883,896 **** endif endif END ! CheckDefFailure(lines, 'E113:') ! CheckScriptSuccess(lines) enddef def Test_exists_compiled() call assert_equal(1, exists_compiled('&tabstop')) ! CheckDefAndScriptFailure(['exists_compiled(10)'], ['E1232:', 'E1233:']) ! CheckDefAndScriptFailure(['exists_compiled(v:progname)'], ['E1232:', 'E1233:']) if exists_compiled('+newoption') if &newoption == 'ok' --- 883,896 ---- endif endif END ! v9.CheckDefFailure(lines, 'E113:') ! v9.CheckScriptSuccess(lines) enddef def Test_exists_compiled() call assert_equal(1, exists_compiled('&tabstop')) ! v9.CheckDefAndScriptFailure(['exists_compiled(10)'], ['E1232:', 'E1233:']) ! v9.CheckDefAndScriptFailure(['exists_compiled(v:progname)'], ['E1232:', 'E1233:']) if exists_compiled('+newoption') if &newoption == 'ok' *************** *** 920,929 **** endif var found = false ! if exists_compiled('*CheckScriptSuccess') found = true endif assert_true(found) if exists_compiled('*NoSuchFunction') NoSuchFunction() endif --- 920,935 ---- endif var found = false ! if exists_compiled('*CheckFeature') ! found = true ! endif ! assert_false(found) ! found = false ! if exists_compiled('*g:CheckFeature') found = true endif assert_true(found) + if exists_compiled('*NoSuchFunction') NoSuchFunction() endif *************** *** 936,944 **** split SomeFile expand('%', true, true)->assert_equal(['SomeFile']) close ! CheckDefAndScriptFailure(['expand(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['expand("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! CheckDefAndScriptFailure(['expand("a", true, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) expand('')->assert_equal('') var caught = false --- 942,950 ---- split SomeFile expand('%', true, true)->assert_equal(['SomeFile']) close ! v9.CheckDefAndScriptFailure(['expand(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['expand("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! v9.CheckDefAndScriptFailure(['expand("a", true, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) expand('')->assert_equal('') var caught = false *************** *** 957,963 **** assert_equal("yes", expandcmd("`={a: 'yes'}['a']`")) expandcmd('')->assert_equal('') ! CheckDefAndScriptFailure(['expandcmd([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_extend_arg_types() --- 963,969 ---- assert_equal("yes", expandcmd("`={a: 'yes'}['a']`")) expandcmd('')->assert_equal('') ! v9.CheckDefAndScriptFailure(['expandcmd([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_extend_arg_types() *************** *** 984,990 **** dany->extend({b: 'x'}) assert_equal({a: 0, b: 'x'}, dany) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END assert_equal([1, 2, "x"], extend([1, 2], ["x"])) --- 990,996 ---- dany->extend({b: 'x'}) assert_equal({a: 0, b: 'x'}, dany) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END assert_equal([1, 2, "x"], extend([1, 2], ["x"])) *************** *** 992,1008 **** assert_equal({a: 1, b: "x"}, extend({a: 1}, {b: "x"})) END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(['extend("a", 1)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E712: Argument of extend() must be a List or Dictionary']) ! CheckDefAndScriptFailure(['extend([1, 2], 3)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E712: Argument of extend() must be a List or Dictionary']) ! CheckDefAndScriptFailure(['var ll = [1, 2]', 'extend(ll, ["x"])'], ['E1013: Argument 2: type mismatch, expected list but got list', 'E1013: Argument 2: type mismatch, expected list but got list']) ! CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string') ! CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict but got number') ! CheckDefFailure(['extend({a: 1}, {b: 2}, 1)'], 'E1013: Argument 3: type mismatch, expected string but got number') ! CheckScriptFailure(['vim9script', 'var l = [1]', 'extend(l, ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list but got list in extend()') enddef func g:ExtendDict(d) --- 998,1014 ---- assert_equal({a: 1, b: "x"}, extend({a: 1}, {b: "x"})) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(['extend("a", 1)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E712: Argument of extend() must be a List or Dictionary']) ! v9.CheckDefAndScriptFailure(['extend([1, 2], 3)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E712: Argument of extend() must be a List or Dictionary']) ! v9.CheckDefAndScriptFailure(['var ll = [1, 2]', 'extend(ll, ["x"])'], ['E1013: Argument 2: type mismatch, expected list but got list', 'E1013: Argument 2: type mismatch, expected list but got list']) ! v9.CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string') ! v9.CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict but got number') ! v9.CheckDefFailure(['extend({a: 1}, {b: 2}, 1)'], 'E1013: Argument 3: type mismatch, expected string but got number') ! v9.CheckScriptFailure(['vim9script', 'var l = [1]', 'extend(l, ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list but got list in extend()') enddef func g:ExtendDict(d) *************** *** 1014,1039 **** var d: dict = {a: 1} extend(d, {b: 2}) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var d: dict = {a: 1} extend(d, {b: 'x'}) END ! CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict but got dict', 2) lines =<< trim END var d: dict = {a: 1} g:ExtendDict(d) END ! CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0) ! CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) lines =<< trim END var d: dict extend(d, {b: 0}) END ! CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict but got dict', 2) enddef func g:ExtendList(l) --- 1020,1045 ---- var d: dict = {a: 1} extend(d, {b: 2}) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var d: dict = {a: 1} extend(d, {b: 'x'}) END ! v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict but got dict', 2) lines =<< trim END var d: dict = {a: 1} g:ExtendDict(d) END ! v9.CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) lines =<< trim END var d: dict extend(d, {b: 0}) END ! v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict but got dict', 2) enddef func g:ExtendList(l) *************** *** 1045,1070 **** var l: list = [1] extend(l, [2]) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var l: list = [1] extend(l, ['x']) END ! CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list but got list', 2) lines =<< trim END var l: list = [1] g:ExtendList(l) END ! CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0) ! CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) lines =<< trim END var l: list extend(l, [0]) END ! CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list but got list', 2) enddef def Test_extend_return_type() --- 1051,1076 ---- var l: list = [1] extend(l, [2]) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var l: list = [1] extend(l, ['x']) END ! v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list but got list', 2) lines =<< trim END var l: list = [1] g:ExtendList(l) END ! v9.CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) lines =<< trim END var l: list extend(l, [0]) END ! v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list but got list', 2) enddef def Test_extend_return_type() *************** *** 1093,1115 **** Test() END ! CheckScriptFailure(lines, 'E1001: Variable not found: m') enddef def Test_extendnew() assert_equal([1, 2, 'a'], extendnew([1, 2], ['a'])) assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'})) ! CheckDefAndScriptFailure(['extendnew({a: 1}, 42)'], ['E1013: Argument 2: type mismatch, expected dict but got number', 'E712: Argument of extendnew() must be a List or Dictionary']) ! CheckDefAndScriptFailure(['extendnew({a: 1}, [42])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E712: Argument of extendnew() must be a List or Dictionary']) ! CheckDefAndScriptFailure(['extendnew([1, 2], "x")'], ['E1013: Argument 2: type mismatch, expected list but got string', 'E712: Argument of extendnew() must be a List or Dictionary']) ! CheckDefAndScriptFailure(['extendnew([1, 2], {x: 1})'], ['E1013: Argument 2: type mismatch, expected list but got dict', 'E712: Argument of extendnew() must be a List or Dictionary']) enddef def Test_feedkeys() ! CheckDefAndScriptFailure(['feedkeys(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['feedkeys("x", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['feedkeys([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) g:TestVar = 1 feedkeys(":g:TestVar = 789\n", 'xt') assert_equal(789, g:TestVar) --- 1099,1121 ---- Test() END ! v9.CheckScriptFailure(lines, 'E1001: Variable not found: m') enddef def Test_extendnew() assert_equal([1, 2, 'a'], extendnew([1, 2], ['a'])) assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'})) ! v9.CheckDefAndScriptFailure(['extendnew({a: 1}, 42)'], ['E1013: Argument 2: type mismatch, expected dict but got number', 'E712: Argument of extendnew() must be a List or Dictionary']) ! v9.CheckDefAndScriptFailure(['extendnew({a: 1}, [42])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E712: Argument of extendnew() must be a List or Dictionary']) ! v9.CheckDefAndScriptFailure(['extendnew([1, 2], "x")'], ['E1013: Argument 2: type mismatch, expected list but got string', 'E712: Argument of extendnew() must be a List or Dictionary']) ! v9.CheckDefAndScriptFailure(['extendnew([1, 2], {x: 1})'], ['E1013: Argument 2: type mismatch, expected list but got dict', 'E712: Argument of extendnew() must be a List or Dictionary']) enddef def Test_feedkeys() ! v9.CheckDefAndScriptFailure(['feedkeys(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['feedkeys("x", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['feedkeys([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) g:TestVar = 1 feedkeys(":g:TestVar = 789\n", 'xt') assert_equal(789, g:TestVar) *************** *** 1120,1135 **** assert_false(filereadable("")) assert_false(filereadable(test_null_string())) ! CheckDefExecFailure(['echo filereadable(123)'], 'E1013:') ! CheckDefExecFailure(['echo filereadable(true)'], 'E1013:') enddef def Test_filewritable() assert_false(filewritable("")) assert_false(filewritable(test_null_string())) ! CheckDefExecFailure(['echo filewritable(123)'], 'E1013:') ! CheckDefExecFailure(['echo filewritable(true)'], 'E1013:') enddef def Test_finddir() --- 1126,1141 ---- assert_false(filereadable("")) assert_false(filereadable(test_null_string())) ! v9.CheckDefExecFailure(['echo filereadable(123)'], 'E1013:') ! v9.CheckDefExecFailure(['echo filereadable(true)'], 'E1013:') enddef def Test_filewritable() assert_false(filewritable("")) assert_false(filewritable(test_null_string())) ! v9.CheckDefExecFailure(['echo filewritable(123)'], 'E1013:') ! v9.CheckDefExecFailure(['echo filewritable(true)'], 'E1013:') enddef def Test_finddir() *************** *** 1138,1157 **** var lines =<< trim END var l: list = finddir('nothing', '*;', -1) END ! CheckDefAndScriptSuccess(lines) delete('Xtestdir', 'rf') ! CheckDefAndScriptFailure(['finddir(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['finddir(v:null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1']) ! CheckDefExecFailure(['echo finddir("")'], 'E1175:') ! CheckDefAndScriptFailure(['finddir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['finddir("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) finddir('abc', '')->assert_equal('') ! CheckDefFailure(['var s: list = finddir("foo")'], 'E1012: Type mismatch; expected list but got string') ! CheckDefFailure(['var s: list = finddir("foo", "path")'], 'E1012: Type mismatch; expected list but got string') # with third argument only runtime type checking ! CheckDefCompileSuccess(['var s: list = finddir("foo", "path", 1)']) enddef def Test_findfile() --- 1144,1163 ---- var lines =<< trim END var l: list = finddir('nothing', '*;', -1) END ! v9.CheckDefAndScriptSuccess(lines) delete('Xtestdir', 'rf') ! v9.CheckDefAndScriptFailure(['finddir(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['finddir(v:null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1']) ! v9.CheckDefExecFailure(['echo finddir("")'], 'E1175:') ! v9.CheckDefAndScriptFailure(['finddir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['finddir("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) finddir('abc', '')->assert_equal('') ! v9.CheckDefFailure(['var s: list = finddir("foo")'], 'E1012: Type mismatch; expected list but got string') ! v9.CheckDefFailure(['var s: list = finddir("foo", "path")'], 'E1012: Type mismatch; expected list but got string') # with third argument only runtime type checking ! v9.CheckDefCompileSuccess(['var s: list = finddir("foo", "path", 1)']) enddef def Test_findfile() *************** *** 1159,1171 **** var lines =<< trim END var l: list = findfile('nothing', '*;', -1) END ! CheckDefAndScriptSuccess(lines) ! CheckDefExecFailure(['findfile(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') ! CheckDefExecFailure(['findfile(v:null)'], 'E1013: Argument 1: type mismatch, expected string but got special') ! CheckDefExecFailure(['findfile("")'], 'E1175:') ! CheckDefAndScriptFailure(['findfile("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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 --- 1165,1177 ---- var lines =<< trim END var l: list = findfile('nothing', '*;', -1) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefExecFailure(['findfile(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') ! v9.CheckDefExecFailure(['findfile(v:null)'], 'E1013: Argument 1: type mismatch, expected string but got special') ! v9.CheckDefExecFailure(['findfile("")'], 'E1175:') ! v9.CheckDefAndScriptFailure(['findfile("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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 *************** *** 1173,1179 **** var lines =<< trim END echo flatten([1, 2, 3]) END ! CheckDefAndScriptFailure(lines, 'E1158:') enddef def Test_flattennew() --- 1179,1185 ---- var lines =<< trim END echo flatten([1, 2, 3]) END ! v9.CheckDefAndScriptFailure(lines, 'E1158:') enddef def Test_flattennew() *************** *** 1188,1197 **** var ll: list> = [['a', 'b', 'c']] assert_equal(['a', 'b', 'c'], ll->flattennew()) END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(['flattennew({})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['flattennew([], "1")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef " Test for float functions argument type --- 1194,1203 ---- var ll: list> = [['a', 'b', 'c']] assert_equal(['a', 'b', 'c'], ll->flattennew()) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(['flattennew({})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['flattennew([], "1")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef " Test for float functions argument type *************** *** 1199,1272 **** CheckFeature float # acos() ! CheckDefAndScriptFailure(['acos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # asin() ! CheckDefAndScriptFailure(['asin("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # atan() ! CheckDefAndScriptFailure(['atan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # atan2() ! CheckDefAndScriptFailure(['atan2("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) ! CheckDefAndScriptFailure(['atan2(1.2, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2']) ! CheckDefAndScriptFailure(['atan2(1.2)'], ['E119:', 'E119:']) # ceil() ! CheckDefAndScriptFailure(['ceil("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # cos() ! CheckDefAndScriptFailure(['cos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # cosh() ! CheckDefAndScriptFailure(['cosh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # exp() ! CheckDefAndScriptFailure(['exp("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # float2nr() ! CheckDefAndScriptFailure(['float2nr("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # floor() ! CheckDefAndScriptFailure(['floor("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # fmod() ! CheckDefAndScriptFailure(['fmod(1.1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2']) ! CheckDefAndScriptFailure(['fmod("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) ! CheckDefAndScriptFailure(['fmod(1.1)'], ['E119:', 'E119:']) # isinf() ! CheckDefAndScriptFailure(['isinf("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # isnan() ! CheckDefAndScriptFailure(['isnan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # log() ! CheckDefAndScriptFailure(['log("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # log10() ! CheckDefAndScriptFailure(['log10("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # pow() ! CheckDefAndScriptFailure(['pow("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) ! CheckDefAndScriptFailure(['pow(1.1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2']) ! CheckDefAndScriptFailure(['pow(1.1)'], ['E119:', 'E119:']) # round() ! CheckDefAndScriptFailure(['round("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # sin() ! CheckDefAndScriptFailure(['sin("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # sinh() ! CheckDefAndScriptFailure(['sinh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # sqrt() ! CheckDefAndScriptFailure(['sqrt("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # tan() ! CheckDefAndScriptFailure(['tan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # tanh() ! CheckDefAndScriptFailure(['tanh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # trunc() ! CheckDefAndScriptFailure(['trunc("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) enddef def Test_fnameescape() ! CheckDefAndScriptFailure(['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() ! CheckDefSuccess(['echo fnamemodify(test_null_string(), ":p")']) ! CheckDefSuccess(['echo fnamemodify("", ":p")']) ! CheckDefSuccess(['echo fnamemodify("file", test_null_string())']) ! CheckDefSuccess(['echo fnamemodify("file", "")']) ! ! CheckDefExecFailure(['echo fnamemodify(true, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got bool') ! CheckDefExecFailure(['echo fnamemodify(v:null, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got special') ! CheckDefExecFailure(['echo fnamemodify("file", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool') enddef def Wrong_dict_key_type(items: list): list --- 1205,1278 ---- CheckFeature float # acos() ! v9.CheckDefAndScriptFailure(['acos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # asin() ! v9.CheckDefAndScriptFailure(['asin("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # atan() ! v9.CheckDefAndScriptFailure(['atan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # atan2() ! v9.CheckDefAndScriptFailure(['atan2("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['atan2(1.2, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['atan2(1.2)'], ['E119:', 'E119:']) # ceil() ! v9.CheckDefAndScriptFailure(['ceil("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # cos() ! v9.CheckDefAndScriptFailure(['cos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # cosh() ! v9.CheckDefAndScriptFailure(['cosh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # exp() ! v9.CheckDefAndScriptFailure(['exp("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # float2nr() ! v9.CheckDefAndScriptFailure(['float2nr("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # floor() ! v9.CheckDefAndScriptFailure(['floor("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # fmod() ! v9.CheckDefAndScriptFailure(['fmod(1.1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['fmod("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['fmod(1.1)'], ['E119:', 'E119:']) # isinf() ! v9.CheckDefAndScriptFailure(['isinf("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # isnan() ! v9.CheckDefAndScriptFailure(['isnan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # log() ! v9.CheckDefAndScriptFailure(['log("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # log10() ! v9.CheckDefAndScriptFailure(['log10("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # pow() ! v9.CheckDefAndScriptFailure(['pow("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['pow(1.1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['pow(1.1)'], ['E119:', 'E119:']) # round() ! v9.CheckDefAndScriptFailure(['round("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # sin() ! v9.CheckDefAndScriptFailure(['sin("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # sinh() ! v9.CheckDefAndScriptFailure(['sinh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # sqrt() ! v9.CheckDefAndScriptFailure(['sqrt("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # tan() ! v9.CheckDefAndScriptFailure(['tan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # tanh() ! v9.CheckDefAndScriptFailure(['tanh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) # trunc() ! v9.CheckDefAndScriptFailure(['trunc("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1']) enddef def Test_fnameescape() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefSuccess(['echo fnamemodify(test_null_string(), ":p")']) ! v9.CheckDefSuccess(['echo fnamemodify("", ":p")']) ! v9.CheckDefSuccess(['echo fnamemodify("file", test_null_string())']) ! v9.CheckDefSuccess(['echo fnamemodify("file", "")']) ! ! v9.CheckDefExecFailure(['echo fnamemodify(true, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got bool') ! v9.CheckDefExecFailure(['echo fnamemodify(v:null, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got special') ! v9.CheckDefExecFailure(['echo fnamemodify("file", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool') enddef def Wrong_dict_key_type(items: list): list *************** *** 1274,1281 **** enddef def Test_filter() ! CheckDefAndScriptFailure(['filter(1.1, "1")'], ['E1013: Argument 1: type mismatch, expected list but got float', 'E1251: List, Dictionary, Blob or String required for argument 1']) ! CheckDefAndScriptFailure(['filter([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String']) var lines =<< trim END def F(i: number, v: any): string --- 1280,1287 ---- enddef def Test_filter() ! v9.CheckDefAndScriptFailure(['filter(1.1, "1")'], ['E1013: Argument 1: type mismatch, expected list but got float', 'E1251: List, Dictionary, Blob or String required for argument 1']) ! v9.CheckDefAndScriptFailure(['filter([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String']) var lines =<< trim END def F(i: number, v: any): string *************** *** 1283,1289 **** enddef echo filter([1, 2, 3], F) END ! CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): bool', 'E1135: Using a String as a Bool:']) assert_equal([], filter([1, 2, 3], '0')) assert_equal([1, 2, 3], filter([1, 2, 3], '1')) --- 1289,1295 ---- enddef echo filter([1, 2, 3], F) END ! v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): bool', 'E1135: Using a String as a Bool:']) assert_equal([], filter([1, 2, 3], '0')) assert_equal([1, 2, 3], filter([1, 2, 3], '1')) *************** *** 1316,1344 **** enddef def Test_foldclosed() ! CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): unknown', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number') assert_equal(-1, foldclosed(1)) assert_equal(-1, foldclosed('$')) enddef def Test_foldclosedend() ! CheckDefAndScriptFailure(['foldclosedend(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['foldclosedend("")'], 'E1209: Invalid value for a line number') assert_equal(-1, foldclosedend(1)) assert_equal(-1, foldclosedend('w0')) enddef def Test_foldlevel() ! CheckDefAndScriptFailure(['foldlevel(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['foldlevel("")'], 'E1209: Invalid value for a line number') assert_equal(0, foldlevel(1)) assert_equal(0, foldlevel('.')) enddef def Test_foldtextresult() ! CheckDefAndScriptFailure(['foldtextresult(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['foldtextresult("")'], 'E1209: Invalid value for a line number') assert_equal('', foldtextresult(1)) assert_equal('', foldtextresult('.')) enddef --- 1322,1350 ---- enddef def Test_foldclosed() ! v9.CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): unknown', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number') assert_equal(-1, foldclosed(1)) assert_equal(-1, foldclosed('$')) enddef def Test_foldclosedend() ! v9.CheckDefAndScriptFailure(['foldclosedend(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['foldclosedend("")'], 'E1209: Invalid value for a line number') assert_equal(-1, foldclosedend(1)) assert_equal(-1, foldclosedend('w0')) enddef def Test_foldlevel() ! v9.CheckDefAndScriptFailure(['foldlevel(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['foldlevel("")'], 'E1209: Invalid value for a line number') assert_equal(0, foldlevel(1)) assert_equal(0, foldlevel('.')) enddef def Test_foldtextresult() ! v9.CheckDefAndScriptFailure(['foldtextresult(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['foldtextresult("")'], 'E1209: Invalid value for a line number') assert_equal('', foldtextresult(1)) assert_equal('', foldtextresult('.')) enddef *************** *** 1368,1375 **** enddef def Test_funcref() ! CheckDefAndScriptFailure(['funcref("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! CheckDefAndScriptFailure(['funcref("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) var lines =<< trim END vim9script --- 1374,1381 ---- enddef def Test_funcref() ! v9.CheckDefAndScriptFailure(['funcref("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! v9.CheckDefAndScriptFailure(['funcref("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) var lines =<< trim END vim9script *************** *** 1386,1392 **** defcompile GetRefOk() END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1392,1398 ---- defcompile GetRefOk() END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1398,1411 **** enddef GetRefBad() END ! CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)') enddef def Test_function() ! CheckDefExecAndScriptFailure(['function(123)'], 'E1256: String or function required for argument 1') ! CheckDefAndScriptFailure(['function("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! CheckDefAndScriptFailure(['function("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) var lines =<< trim END vim9script --- 1404,1417 ---- enddef GetRefBad() END ! v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)') enddef def Test_function() ! v9.CheckDefExecAndScriptFailure(['function(123)'], 'E1256: String or function required for argument 1') ! v9.CheckDefAndScriptFailure(['function("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! v9.CheckDefAndScriptFailure(['function("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) var lines =<< trim END vim9script *************** *** 1422,1428 **** defcompile GetRefOk() END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1428,1434 ---- defcompile GetRefOk() END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1434,1450 **** enddef GetRefBad() END ! CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)') enddef def Test_garbagecollect() garbagecollect(true) ! CheckDefAndScriptFailure(['garbagecollect("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) ! CheckDefAndScriptFailure(['garbagecollect(20)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) enddef def Test_get() ! CheckDefAndScriptFailure(['get("a", 1)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E896: Argument of get() must be a List, Dictionary or Blob']) [3, 5, 2]->get(1)->assert_equal(5) [3, 5, 2]->get(3)->assert_equal(0) [3, 5, 2]->get(3, 9)->assert_equal(9) --- 1440,1456 ---- enddef GetRefBad() END ! v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)') enddef def Test_garbagecollect() garbagecollect(true) ! v9.CheckDefAndScriptFailure(['garbagecollect("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) ! v9.CheckDefAndScriptFailure(['garbagecollect(20)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) enddef def Test_get() ! v9.CheckDefAndScriptFailure(['get("a", 1)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E896: Argument of get() must be a List, Dictionary or Blob']) [3, 5, 2]->get(1)->assert_equal(5) [3, 5, 2]->get(3)->assert_equal(0) [3, 5, 2]->get(3, 9)->assert_equal(9) *************** *** 1464,1470 **** enddef assert_equal(0, DoThat()) END ! CheckScriptSuccess(lines) enddef def Test_getbufinfo() --- 1470,1476 ---- enddef assert_equal(0, DoThat()) END ! v9.CheckScriptSuccess(lines) enddef def Test_getbufinfo() *************** *** 1477,1483 **** getbufinfo({bufloaded: true, buflisted: true, bufmodified: false}) ->len()->assert_equal(3) bwipe Xtestfile1 Xtestfile2 ! CheckDefAndScriptFailure(['getbufinfo(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) enddef def Test_getbufline() --- 1483,1489 ---- getbufinfo({bufloaded: true, buflisted: true, bufmodified: false}) ->len()->assert_equal(3) bwipe Xtestfile1 Xtestfile2 ! v9.CheckDefAndScriptFailure(['getbufinfo(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) enddef def Test_getbufline() *************** *** 1494,1507 **** assert_fails('getbufline("", "$", "$b")', ['E1030: Using a String as a Number: "$b"', 'E1030: Using a String as a Number: "$b"']) bwipe! ! CheckDefAndScriptFailure(['getbufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['getbufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) ! CheckDefAndScriptFailure(['getbufline("a", 2, 0z10)'], ['E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3']) enddef def Test_getbufvar() ! CheckDefAndScriptFailure(['getbufvar(true, "v")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['getbufvar(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_getchangelist() --- 1500,1513 ---- assert_fails('getbufline("", "$", "$b")', ['E1030: Using a String as a Number: "$b"', 'E1030: Using a String as a Number: "$b"']) bwipe! ! v9.CheckDefAndScriptFailure(['getbufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getbufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['getbufline("a", 2, 0z10)'], ['E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3']) enddef def Test_getbufvar() ! v9.CheckDefAndScriptFailure(['getbufvar(true, "v")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getbufvar(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_getchangelist() *************** *** 1517,1535 **** endwhile getchar(true)->assert_equal(0) getchar(1)->assert_equal(0) ! CheckDefAndScriptFailure(['getchar(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) ! CheckDefAndScriptFailure(['getchar("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) enddef def Test_getcharpos() ! CheckDefAndScriptFailure(['getcharpos(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['getcharpos(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefExecAndScriptFailure(['getcharpos("")'], 'E1209: Invalid value for a line number') enddef def Test_getcharstr() ! CheckDefAndScriptFailure(['getcharstr(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) ! CheckDefAndScriptFailure(['getcharstr("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) enddef def Test_getcompletion() --- 1523,1541 ---- endwhile getchar(true)->assert_equal(0) getchar(1)->assert_equal(0) ! v9.CheckDefAndScriptFailure(['getchar(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) ! v9.CheckDefAndScriptFailure(['getchar("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) enddef def Test_getcharpos() ! v9.CheckDefAndScriptFailure(['getcharpos(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['getcharpos(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['getcharpos("")'], 'E1209: Invalid value for a line number') enddef def Test_getcharstr() ! v9.CheckDefAndScriptFailure(['getcharstr(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) ! v9.CheckDefAndScriptFailure(['getcharstr("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) enddef def Test_getcompletion() *************** *** 1537,1561 **** var l = getcompletion('run', 'file', true) l->assert_equal([]) set wildignore& ! CheckDefAndScriptFailure(['getcompletion(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['getcompletion("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['getcompletion("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) ! CheckDefExecAndScriptFailure(['getcompletion("a", "")'], 'E475: Invalid argument') getcompletion('', 'messages')->assert_equal(['clear']) enddef def Test_getcurpos() ! CheckDefAndScriptFailure(['getcurpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getcursorcharpos() ! CheckDefAndScriptFailure(['getcursorcharpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getcwd() ! CheckDefAndScriptFailure(['getcwd("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['getcwd("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['getcwd(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_getenv() --- 1543,1567 ---- var l = getcompletion('run', 'file', true) l->assert_equal([]) set wildignore& ! v9.CheckDefAndScriptFailure(['getcompletion(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['getcompletion("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['getcompletion("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) ! v9.CheckDefExecAndScriptFailure(['getcompletion("a", "")'], 'E475: Invalid argument') getcompletion('', 'messages')->assert_equal(['clear']) enddef def Test_getcurpos() ! v9.CheckDefAndScriptFailure(['getcurpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getcursorcharpos() ! v9.CheckDefAndScriptFailure(['getcursorcharpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getcwd() ! v9.CheckDefAndScriptFailure(['getcwd("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getcwd("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getcwd(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_getenv() *************** *** 1573,1579 **** enddef def Test_getfontname() ! CheckDefAndScriptFailure(['getfontname(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) #getfontname('')->assert_equal('') enddef --- 1579,1585 ---- enddef def Test_getfontname() ! v9.CheckDefAndScriptFailure(['getfontname(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) #getfontname('')->assert_equal('') enddef *************** *** 1581,1618 **** assert_equal('', getfperm("")) assert_equal('', getfperm(test_null_string())) ! CheckDefExecFailure(['echo getfperm(true)'], 'E1013:') ! CheckDefExecFailure(['echo getfperm(v:null)'], 'E1013:') enddef def Test_getfsize() assert_equal(-1, getfsize("")) assert_equal(-1, getfsize(test_null_string())) ! CheckDefExecFailure(['echo getfsize(true)'], 'E1013:') ! CheckDefExecFailure(['echo getfsize(v:null)'], 'E1013:') enddef def Test_getftime() assert_equal(-1, getftime("")) assert_equal(-1, getftime(test_null_string())) ! CheckDefExecFailure(['echo getftime(true)'], 'E1013:') ! CheckDefExecFailure(['echo getftime(v:null)'], 'E1013:') enddef def Test_getftype() assert_equal('', getftype("")) assert_equal('', getftype(test_null_string())) ! CheckDefExecFailure(['echo getftype(true)'], 'E1013:') ! CheckDefExecFailure(['echo getftype(v:null)'], 'E1013:') enddef def Test_getjumplist() ! CheckDefAndScriptFailure(['getjumplist("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['getjumplist("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['getjumplist(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_getline() --- 1587,1624 ---- assert_equal('', getfperm("")) assert_equal('', getfperm(test_null_string())) ! v9.CheckDefExecFailure(['echo getfperm(true)'], 'E1013:') ! v9.CheckDefExecFailure(['echo getfperm(v:null)'], 'E1013:') enddef def Test_getfsize() assert_equal(-1, getfsize("")) assert_equal(-1, getfsize(test_null_string())) ! v9.CheckDefExecFailure(['echo getfsize(true)'], 'E1013:') ! v9.CheckDefExecFailure(['echo getfsize(v:null)'], 'E1013:') enddef def Test_getftime() assert_equal(-1, getftime("")) assert_equal(-1, getftime(test_null_string())) ! v9.CheckDefExecFailure(['echo getftime(true)'], 'E1013:') ! v9.CheckDefExecFailure(['echo getftime(v:null)'], 'E1013:') enddef def Test_getftype() assert_equal('', getftype("")) assert_equal('', getftype(test_null_string())) ! v9.CheckDefExecFailure(['echo getftype(true)'], 'E1013:') ! v9.CheckDefExecFailure(['echo getftype(v:null)'], 'E1013:') enddef def Test_getjumplist() ! v9.CheckDefAndScriptFailure(['getjumplist("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getjumplist("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getjumplist(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_getline() *************** *** 1626,1645 **** assert_equal('there', getline("'<")) assert_equal('again', getline("'>")) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END echo getline('1') END ! CheckDefExecAndScriptFailure(lines, 'E1209:') ! CheckDefAndScriptFailure(['getline(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['getline(1, true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2']) ! CheckDefExecAndScriptFailure(['getline("")'], 'E1209: Invalid value for a line number') enddef def Test_getloclist() ! CheckDefAndScriptFailure(['getloclist("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['getloclist(1, [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_getloclist_return_type() --- 1632,1651 ---- assert_equal('there', getline("'<")) assert_equal('again', getline("'>")) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END echo getline('1') END ! v9.CheckDefExecAndScriptFailure(lines, 'E1209:') ! v9.CheckDefAndScriptFailure(['getline(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getline(1, true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['getline("")'], 'E1209: Invalid value for a line number') enddef def Test_getloclist() ! v9.CheckDefAndScriptFailure(['getloclist("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getloclist(1, [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_getloclist_return_type() *************** *** 1651,1674 **** enddef def Test_getmarklist() ! CheckDefAndScriptFailure(['getmarklist([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) assert_equal([], getmarklist(10000)) assert_fails('getmarklist("a%b@#")', 'E94:') enddef def Test_getmatches() ! CheckDefAndScriptFailure(['getmatches("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getpos() ! CheckDefAndScriptFailure(['getpos(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) assert_equal([0, 1, 1, 0], getpos('.')) ! CheckDefExecFailure(['getpos("a")'], 'E1209:') ! CheckDefExecAndScriptFailure(['getpos("")'], 'E1209: Invalid value for a line number') enddef def Test_getqflist() ! CheckDefAndScriptFailure(['getqflist([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) call assert_equal({}, getqflist({})) enddef --- 1657,1680 ---- enddef def Test_getmarklist() ! v9.CheckDefAndScriptFailure(['getmarklist([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) assert_equal([], getmarklist(10000)) assert_fails('getmarklist("a%b@#")', 'E94:') enddef def Test_getmatches() ! v9.CheckDefAndScriptFailure(['getmatches("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getpos() ! v9.CheckDefAndScriptFailure(['getpos(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) assert_equal([0, 1, 1, 0], getpos('.')) ! v9.CheckDefExecFailure(['getpos("a")'], 'E1209:') ! v9.CheckDefExecAndScriptFailure(['getpos("")'], 'E1209: Invalid value for a line number') enddef def Test_getqflist() ! v9.CheckDefAndScriptFailure(['getqflist([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) call assert_equal({}, getqflist({})) enddef *************** *** 1685,1693 **** setreg('a', lines) getreg('a', true, true)->assert_equal(lines) assert_fails('getreg("ab")', 'E1162:') ! CheckDefAndScriptFailure(['getreg(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['getreg(".", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! CheckDefAndScriptFailure(['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 --- 1691,1699 ---- setreg('a', lines) getreg('a', true, true)->assert_equal(lines) assert_fails('getreg("ab")', 'E1162:') ! v9.CheckDefAndScriptFailure(['getreg(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['getreg(".", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! v9.CheckDefAndScriptFailure(['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 *************** *** 1717,1788 **** enddef def Test_gettabinfo() ! CheckDefAndScriptFailure(['gettabinfo("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_gettabvar() ! CheckDefAndScriptFailure(['gettabvar("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['gettabvar(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_gettabwinvar() ! CheckDefAndScriptFailure(['gettabwinvar("a", 2, "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['gettabwinvar(1, "b", "c", [])'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['gettabwinvar(1, 1, 3, {})'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_gettagstack() ! CheckDefAndScriptFailure(['gettagstack("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_gettext() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['getwininfo("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getwinpos() ! CheckDefAndScriptFailure(['getwinpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getwinvar() ! CheckDefAndScriptFailure(['getwinvar("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['getwinvar(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_glob() glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim']) ! CheckDefAndScriptFailure(['glob(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['glob("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! CheckDefAndScriptFailure(['glob("a", 1, "b")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['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() globpath('.', 'runtest.vim', true, true, true)->assert_equal(['./runtest.vim']) ! CheckDefAndScriptFailure(['globpath(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['globpath("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['globpath("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3']) ! CheckDefAndScriptFailure(['globpath("a", "b", true, "d")'], ['E1013: Argument 4: type mismatch, expected bool but got string', 'E1212: Bool required for argument 4']) ! CheckDefAndScriptFailure(['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) ! CheckDefAndScriptFailure(['has(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['has("a", "b")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2']) has('')->assert_equal(0) enddef --- 1723,1794 ---- enddef def Test_gettabinfo() ! v9.CheckDefAndScriptFailure(['gettabinfo("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_gettabvar() ! v9.CheckDefAndScriptFailure(['gettabvar("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['gettabvar(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_gettabwinvar() ! v9.CheckDefAndScriptFailure(['gettabwinvar("a", 2, "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['gettabwinvar(1, "b", "c", [])'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['gettabwinvar(1, 1, 3, {})'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_gettagstack() ! v9.CheckDefAndScriptFailure(['gettagstack("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_gettext() ! v9.CheckDefAndScriptFailure(['gettext(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['gettext("")'], 'E475: Invalid argument') assert_equal('abc', gettext("abc")) assert_fails('gettext("")', 'E475:') enddef def Test_getwininfo() ! v9.CheckDefAndScriptFailure(['getwininfo("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getwinpos() ! v9.CheckDefAndScriptFailure(['getwinpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_getwinvar() ! v9.CheckDefAndScriptFailure(['getwinvar("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['getwinvar(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_glob() glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim']) ! v9.CheckDefAndScriptFailure(['glob(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['glob("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! v9.CheckDefAndScriptFailure(['glob("a", 1, "b")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['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() globpath('.', 'runtest.vim', true, true, true)->assert_equal(['./runtest.vim']) ! v9.CheckDefAndScriptFailure(['globpath(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['globpath("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['globpath("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3']) ! v9.CheckDefAndScriptFailure(['globpath("a", "b", true, "d")'], ['E1013: Argument 4: type mismatch, expected bool but got string', 'E1212: Bool required for argument 4']) ! v9.CheckDefAndScriptFailure(['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) ! v9.CheckDefAndScriptFailure(['has(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['has("a", "b")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2']) has('')->assert_equal(0) enddef *************** *** 1793,1806 **** assert_false(has_key(d, 'x')) assert_false(has_key(d, 99)) ! CheckDefAndScriptFailure(['has_key([1, 2], "k")'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! CheckDefAndScriptFailure(['has_key({"a": 10}, ["a"])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) enddef def Test_haslocaldir() ! CheckDefAndScriptFailure(['haslocaldir("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['haslocaldir("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['haslocaldir(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_hasmapto() --- 1799,1812 ---- assert_false(has_key(d, 'x')) assert_false(has_key(d, 99)) ! v9.CheckDefAndScriptFailure(['has_key([1, 2], "k")'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! v9.CheckDefAndScriptFailure(['has_key({"a": 10}, ["a"])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) enddef def Test_haslocaldir() ! v9.CheckDefAndScriptFailure(['haslocaldir("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['haslocaldir("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['haslocaldir(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_hasmapto() *************** *** 1808,1916 **** iabbrev foo foobar hasmapto('foobar', 'i', true)->assert_equal(1) iunabbrev foo ! CheckDefAndScriptFailure(['hasmapto(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['hasmapto("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['histadd(1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['histadd(":", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) histadd("search", 'skyblue') assert_equal('skyblue', histget('/', -1)) histadd("search", '')->assert_equal(0) enddef def Test_histdel() ! CheckDefAndScriptFailure(['histdel(1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['histdel(":", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2']) histdel('search', '')->assert_equal(0) enddef def Test_histget() ! CheckDefAndScriptFailure(['histget(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['histget("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_histnr() ! CheckDefAndScriptFailure(['histnr(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) assert_equal(-1, histnr('abc')) enddef def Test_hlID() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['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_hlget() ! CheckDefAndScriptFailure(['hlget([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) hlget('')->assert_equal([]) enddef def Test_hlset() ! CheckDefAndScriptFailure(['hlset("id")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) hlset([])->assert_equal(0) enddef def Test_iconv() ! CheckDefAndScriptFailure(['iconv(1, "from", "to")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['iconv("abc", 10, "to")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['indent([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['indent(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['indent("")'], 'E1209: Invalid value for a line number') ! CheckDefExecAndScriptFailure(['indent(-1)'], 'E966: Invalid line number: -1') assert_equal(0, indent(1)) enddef def Test_index() index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3) ! CheckDefAndScriptFailure(['index("a", "a")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1226: List or Blob required for argument 1']) ! CheckDefFailure(['index(["1"], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number') ! CheckDefAndScriptFailure(['index(0z10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['index([1], 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['index(0z1020, 10, 1, 2)'], ['E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4']) enddef def Test_input() ! CheckDefAndScriptFailure(['input(5)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['input(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['input("p", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['input("p", "q", 20)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_inputdialog() ! CheckDefAndScriptFailure(['inputdialog(5)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['inputdialog(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['inputdialog("p", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['inputdialog("p", "q", 20)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_inputlist() ! CheckDefAndScriptFailure(['inputlist(10)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['inputlist("abc")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefFailure(['inputlist([1, 2, 3])'], 'E1013: Argument 1: type mismatch, expected list but got list') feedkeys("2\", 't') var r: number = inputlist(['a', 'b', 'c']) assert_equal(2, r) enddef def Test_inputsecret() ! CheckDefAndScriptFailure(['inputsecret(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['inputsecret("Pass:", 20)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) feedkeys("\", 't') var ans: string = inputsecret('Pass:', '123') assert_equal('123', ans) --- 1814,1922 ---- iabbrev foo foobar hasmapto('foobar', 'i', true)->assert_equal(1) iunabbrev foo ! v9.CheckDefAndScriptFailure(['hasmapto(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['hasmapto("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['histadd(1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['histadd(":", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) histadd("search", 'skyblue') assert_equal('skyblue', histget('/', -1)) histadd("search", '')->assert_equal(0) enddef def Test_histdel() ! v9.CheckDefAndScriptFailure(['histdel(1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['histdel(":", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2']) histdel('search', '')->assert_equal(0) enddef def Test_histget() ! v9.CheckDefAndScriptFailure(['histget(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['histget("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_histnr() ! v9.CheckDefAndScriptFailure(['histnr(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) assert_equal(-1, histnr('abc')) enddef def Test_hlID() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['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_hlget() ! v9.CheckDefAndScriptFailure(['hlget([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) hlget('')->assert_equal([]) enddef def Test_hlset() ! v9.CheckDefAndScriptFailure(['hlset("id")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) hlset([])->assert_equal(0) enddef def Test_iconv() ! v9.CheckDefAndScriptFailure(['iconv(1, "from", "to")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['iconv("abc", 10, "to")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['indent([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['indent(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['indent("")'], 'E1209: Invalid value for a line number') ! v9.CheckDefExecAndScriptFailure(['indent(-1)'], 'E966: Invalid line number: -1') assert_equal(0, indent(1)) enddef def Test_index() index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3) ! v9.CheckDefAndScriptFailure(['index("a", "a")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1226: List or Blob required for argument 1']) ! v9.CheckDefFailure(['index(["1"], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number') ! v9.CheckDefAndScriptFailure(['index(0z10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['index([1], 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['index(0z1020, 10, 1, 2)'], ['E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4']) enddef def Test_input() ! v9.CheckDefAndScriptFailure(['input(5)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['input(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['input("p", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['input("p", "q", 20)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_inputdialog() ! v9.CheckDefAndScriptFailure(['inputdialog(5)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['inputdialog(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['inputdialog("p", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['inputdialog("p", "q", 20)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_inputlist() ! v9.CheckDefAndScriptFailure(['inputlist(10)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['inputlist("abc")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefFailure(['inputlist([1, 2, 3])'], 'E1013: Argument 1: type mismatch, expected list but got list') feedkeys("2\", 't') var r: number = inputlist(['a', 'b', 'c']) assert_equal(2, r) enddef def Test_inputsecret() ! v9.CheckDefAndScriptFailure(['inputsecret(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['inputsecret("Pass:", 20)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) feedkeys("\", 't') var ans: string = inputsecret('Pass:', '123') assert_equal('123', ans) *************** *** 1937,1948 **** var lines =<< trim END insert(test_null_list(), 123) END ! CheckDefExecAndScriptFailure(lines, 'E1130:', 1) lines =<< trim END insert(test_null_blob(), 123) END ! CheckDefExecAndScriptFailure(lines, 'E1131:', 1) assert_equal([1, 2, 3], insert([2, 3], 1)) assert_equal([1, 2, 3], insert([2, 3], s:number_one)) --- 1943,1954 ---- var lines =<< trim END insert(test_null_list(), 123) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1130:', 1) lines =<< trim END insert(test_null_blob(), 123) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1131:', 1) assert_equal([1, 2, 3], insert([2, 3], 1)) assert_equal([1, 2, 3], insert([2, 3], s:number_one)) *************** *** 1951,1974 **** assert_equal(['a', 'b', 'c'], insert(['b', 'c'], 'a')) assert_equal(0z1234, insert(0z34, 0x12)) ! CheckDefAndScriptFailure(['insert("a", 1)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1226: List or Blob required for argument 1']) ! CheckDefFailure(['insert([2, 3], "a")'], 'E1013: Argument 2: type mismatch, expected number but got string') ! CheckDefAndScriptFailure(['insert([2, 3], 1, "x")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_invert() ! CheckDefAndScriptFailure(['invert("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_isdirectory() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['islocked(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['var n1: number = 10', 'islocked(n1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) g:v1 = 10 assert_false(islocked('g:v1')) lockvar g:v1 --- 1957,1980 ---- assert_equal(['a', 'b', 'c'], insert(['b', 'c'], 'a')) assert_equal(0z1234, insert(0z34, 0x12)) ! v9.CheckDefAndScriptFailure(['insert("a", 1)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1226: List or Blob required for argument 1']) ! v9.CheckDefFailure(['insert([2, 3], "a")'], 'E1013: Argument 2: type mismatch, expected number but got string') ! v9.CheckDefAndScriptFailure(['insert([2, 3], 1, "x")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_invert() ! v9.CheckDefAndScriptFailure(['invert("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_isdirectory() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['islocked(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['var n1: number = 10', 'islocked(n1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) g:v1 = 10 assert_false(islocked('g:v1')) lockvar g:v1 *************** *** 1978,1984 **** enddef def Test_items() ! CheckDefFailure(['[]->items()'], 'E1013: Argument 1: type mismatch, expected dict but got list') assert_equal([['a', 10], ['b', 20]], {'a': 10, 'b': 20}->items()) assert_equal([], {}->items()) enddef --- 1984,1990 ---- enddef def Test_items() ! v9.CheckDefFailure(['[]->items()'], 'E1013: Argument 1: type mismatch, expected dict but got list') assert_equal([['a', 10], ['b', 20]], {'a': 10, 'b': 20}->items()) assert_equal([], {}->items()) enddef *************** *** 1987,1993 **** if !has('job') CheckFeature job else ! CheckDefAndScriptFailure(['job_getchannel("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1']) assert_fails('job_getchannel(test_null_job())', 'E916: not a valid job') endif enddef --- 1993,1999 ---- if !has('job') CheckFeature job else ! v9.CheckDefAndScriptFailure(['job_getchannel("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1']) assert_fails('job_getchannel(test_null_job())', 'E916: not a valid job') endif enddef *************** *** 1996,2002 **** if !has('job') CheckFeature job else ! CheckDefAndScriptFailure(['job_info("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1']) assert_fails('job_info(test_null_job())', 'E916: not a valid job') endif enddef --- 2002,2008 ---- if !has('job') CheckFeature job else ! v9.CheckDefAndScriptFailure(['job_info("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1']) assert_fails('job_info(test_null_job())', 'E916: not a valid job') endif enddef *************** *** 2007,2014 **** if !has('job') CheckFeature job else ! CheckDefAndScriptFailure(['job_setoptions(test_null_channel(), {})'], ['E1013: Argument 1: type mismatch, expected job but got channel', 'E1218: Job required for argument 1']) ! CheckDefAndScriptFailure(['job_setoptions(test_null_job(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) assert_equal('fail', job_status(test_null_job())) endif enddef --- 2013,2020 ---- if !has('job') CheckFeature job else ! v9.CheckDefAndScriptFailure(['job_setoptions(test_null_channel(), {})'], ['E1013: Argument 1: type mismatch, expected job but got channel', 'E1218: Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['job_setoptions(test_null_job(), [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) assert_equal('fail', job_status(test_null_job())) endif enddef *************** *** 2017,2023 **** if !has('job') CheckFeature job else ! CheckDefAndScriptFailure(['job_status("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1']) assert_equal('fail', job_status(test_null_job())) endif enddef --- 2023,2029 ---- if !has('job') CheckFeature job else ! v9.CheckDefAndScriptFailure(['job_status("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1']) assert_equal('fail', job_status(test_null_job())) endif enddef *************** *** 2026,2056 **** if !has('job') CheckFeature job else ! CheckDefAndScriptFailure(['job_stop("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1']) ! CheckDefAndScriptFailure(['job_stop(test_null_job(), true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2']) endif enddef def Test_join() ! CheckDefAndScriptFailure(['join("abc")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['keys([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) assert_equal(['a'], {a: 'v'}->keys()) assert_equal([], {}->keys()) enddef --- 2032,2062 ---- if !has('job') CheckFeature job else ! v9.CheckDefAndScriptFailure(['job_stop("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1']) ! v9.CheckDefAndScriptFailure(['job_stop(test_null_job(), true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2']) endif enddef def Test_join() ! v9.CheckDefAndScriptFailure(['join("abc")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['keys([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) assert_equal(['a'], {a: 'v'}->keys()) assert_equal([], {}->keys()) enddef *************** *** 2061,2067 **** enddef def Test_len() ! CheckDefAndScriptFailure(['len(true)'], ['E1013: Argument 1: type mismatch, expected list but got bool', 'E701: Invalid type for len()']) assert_equal(2, "ab"->len()) assert_equal(3, 456->len()) assert_equal(0, []->len()) --- 2067,2073 ---- enddef def Test_len() ! v9.CheckDefAndScriptFailure(['len(true)'], ['E1013: Argument 1: type mismatch, expected list but got bool', 'E701: Invalid type for len()']) assert_equal(2, "ab"->len()) assert_equal(3, 456->len()) assert_equal(0, []->len()) *************** *** 2071,2112 **** def Test_libcall() CheckFeature libcall ! CheckDefAndScriptFailure(['libcall(1, "b", 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['libcall("a", 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['libcall("a", "b", 1.1)'], ['E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3']) enddef def Test_libcallnr() CheckFeature libcall ! CheckDefAndScriptFailure(['libcallnr(1, "b", 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['libcallnr("a", 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['libcallnr("a", "b", 1.1)'], ['E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3']) enddef def Test_line() assert_fails('line(true)', 'E1174:') ! CheckDefAndScriptFailure(['line(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['line(".", "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefExecAndScriptFailure(['line("")'], 'E1209: Invalid value for a line number') enddef def Test_line2byte() ! CheckDefAndScriptFailure(['line2byte(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['line2byte("")'], 'E1209: Invalid value for a line number') assert_equal(-1, line2byte(1)) assert_equal(-1, line2byte(10000)) enddef def Test_lispindent() ! CheckDefAndScriptFailure(['lispindent({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['lispindent("")'], 'E1209: Invalid value for a line number') ! CheckDefExecAndScriptFailure(['lispindent(-1)'], 'E966: Invalid line number: -1') assert_equal(0, lispindent(1)) enddef def Test_list2blob() ! CheckDefAndScriptFailure(['list2blob(10)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! CheckDefFailure(['list2blob([0z10, 0z02])'], 'E1013: Argument 1: type mismatch, expected list but got list') enddef def Test_list2str_str2list_utf8() --- 2077,2118 ---- def Test_libcall() CheckFeature libcall ! v9.CheckDefAndScriptFailure(['libcall(1, "b", 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['libcall("a", 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['libcall("a", "b", 1.1)'], ['E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3']) enddef def Test_libcallnr() CheckFeature libcall ! v9.CheckDefAndScriptFailure(['libcallnr(1, "b", 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['libcallnr("a", 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['libcallnr("a", "b", 1.1)'], ['E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3']) enddef def Test_line() assert_fails('line(true)', 'E1174:') ! v9.CheckDefAndScriptFailure(['line(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['line(".", "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['line("")'], 'E1209: Invalid value for a line number') enddef def Test_line2byte() ! v9.CheckDefAndScriptFailure(['line2byte(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['line2byte("")'], 'E1209: Invalid value for a line number') assert_equal(-1, line2byte(1)) assert_equal(-1, line2byte(10000)) enddef def Test_lispindent() ! v9.CheckDefAndScriptFailure(['lispindent({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['lispindent("")'], 'E1209: Invalid value for a line number') ! v9.CheckDefExecAndScriptFailure(['lispindent(-1)'], 'E966: Invalid line number: -1') assert_equal(0, lispindent(1)) enddef def Test_list2blob() ! v9.CheckDefAndScriptFailure(['list2blob(10)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! v9.CheckDefFailure(['list2blob([0z10, 0z02])'], 'E1013: Argument 1: type mismatch, expected list but got list') enddef def Test_list2str_str2list_utf8() *************** *** 2117,2149 **** enddef def Test_list2str() ! CheckDefAndScriptFailure(['list2str(".", true)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['list2str([1], 0z10)'], ['E1013: Argument 2: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 2']) enddef ! def SID(): number return expand('') ->matchstr('\zs\d\+\ze_$') ->str2nr() enddef def Test_listener_add() ! CheckDefAndScriptFailure(['listener_add("1", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2']) enddef def Test_listener_flush() ! CheckDefAndScriptFailure(['listener_flush([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) enddef def Test_listener_remove() ! CheckDefAndScriptFailure(['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 ! CheckDefAndScriptFailure(['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 --- 2123,2155 ---- enddef def Test_list2str() ! v9.CheckDefAndScriptFailure(['list2str(".", true)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['list2str([1], 0z10)'], ['E1013: Argument 2: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 2']) enddef ! def s:SID(): number return expand('') ->matchstr('\zs\d\+\ze_$') ->str2nr() enddef def Test_listener_add() ! v9.CheckDefAndScriptFailure(['listener_add("1", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2']) enddef def Test_listener_flush() ! v9.CheckDefAndScriptFailure(['listener_flush([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) enddef def Test_listener_remove() ! v9.CheckDefAndScriptFailure(['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 ! v9.CheckDefAndScriptFailure(['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 *************** *** 2151,2160 **** def Test_map() if has('channel') ! CheckDefAndScriptFailure(['map(test_null_channel(), "1")'], ['E1013: Argument 1: type mismatch, expected list but got channel', 'E1251: List, Dictionary, Blob or String required for argument 1']) endif ! CheckDefAndScriptFailure(['map(1, "1")'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1251: List, Dictionary, Blob or String required for argument 1']) ! CheckDefAndScriptFailure(['map([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String']) # type of dict remains dict even when type of values changes # same for list --- 2157,2166 ---- def Test_map() if has('channel') ! v9.CheckDefAndScriptFailure(['map(test_null_channel(), "1")'], ['E1013: Argument 1: type mismatch, expected list but got channel', 'E1251: List, Dictionary, Blob or String required for argument 1']) endif ! v9.CheckDefAndScriptFailure(['map(1, "1")'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1251: List, Dictionary, Blob or String required for argument 1']) ! v9.CheckDefAndScriptFailure(['map([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String']) # type of dict remains dict even when type of values changes # same for list *************** *** 2179,2185 **** map(g:gl, (k, v) => true) assert_equal([true], g:gl) END ! CheckDefAndScriptSuccess(lines) enddef def Test_map_failure() --- 2185,2191 ---- map(g:gl, (k, v) => true) assert_equal([true], g:gl) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_map_failure() *************** *** 2198,2204 **** enddef e END ! CheckScriptFailure(lines, 'E1013:') au! BufReadPost delete('Xtmpfile') --- 2204,2210 ---- enddef e END ! v9.CheckScriptFailure(lines, 'E1013:') au! BufReadPost delete('Xtmpfile') *************** *** 2207,2213 **** g:gd = d map(g:gd, (k, v) => true) END ! CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got bool') enddef def Test_map_function_arg() --- 2213,2219 ---- g:gd = d map(g:gd, (k, v) => true) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got bool') enddef def Test_map_function_arg() *************** *** 2219,2234 **** map(l, MapOne) assert_equal(['0:a', '1:b', '2:c'], l) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END range(3)->map((a, b, c) => a + b + c) END ! CheckDefExecAndScriptFailure(lines, 'E1190: One argument too few') lines =<< trim END range(3)->map((a, b, c, d) => a + b + c + d) END ! CheckDefExecAndScriptFailure(lines, 'E1190: 2 arguments too few') # declared list cannot change type lines =<< trim END --- 2225,2240 ---- map(l, MapOne) assert_equal(['0:a', '1:b', '2:c'], l) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END range(3)->map((a, b, c) => a + b + c) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1190: One argument too few') lines =<< trim END range(3)->map((a, b, c, d) => a + b + c + d) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1190: 2 arguments too few') # declared list cannot change type lines =<< trim END *************** *** 2238,2244 **** var ll: list = [1, 2, 3] echo map(ll, Map) END ! CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): number but got func(number, number): string', 'E1012: Type mismatch; expected number but got string in map()']) # not declared list can change type echo [1, 2, 3]->map((..._) => 'x') --- 2244,2250 ---- var ll: list = [1, 2, 3] echo map(ll, Map) END ! v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): number but got func(number, number): string', 'E1012: Type mismatch; expected number but got string in map()']) # not declared list can change type echo [1, 2, 3]->map((..._) => 'x') *************** *** 2250,2274 **** map(l, (k, v) => k .. '/' .. v ) assert_equal(['0/a', '1/b', '2/c'], l) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var l: list = [0] echo map(l, (_, v) => []) END ! CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): number but got func(any, any): list', 'E1012: Type mismatch; expected number but got list in map()'], 2) lines =<< trim END var l: list = range(2) echo map(l, (_, v) => []) END ! CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): number but got func(any, any): list', 'E1012: Type mismatch; expected number but got list in map()'], 2) lines =<< trim END var d: dict = {key: 0} echo map(d, (_, v) => []) END ! CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): number but got func(any, any): list', 'E1012: Type mismatch; expected number but got list in map()'], 2) enddef def Test_maparg() --- 2256,2280 ---- map(l, (k, v) => k .. '/' .. v ) assert_equal(['0/a', '1/b', '2/c'], l) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var l: list = [0] echo map(l, (_, v) => []) END ! v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): number but got func(any, any): list', 'E1012: Type mismatch; expected number but got list in map()'], 2) lines =<< trim END var l: list = range(2) echo map(l, (_, v) => []) END ! v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): number but got func(any, any): list', 'E1012: Type mismatch; expected number but got list in map()'], 2) lines =<< trim END var d: dict = {key: 0} echo map(d, (_, v) => []) END ! v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(...): number but got func(any, any): list', 'E1012: Type mismatch; expected number but got list in map()'], 2) enddef def Test_maparg() *************** *** 2289,2298 **** rhs: 'bar', buffer: 0}) unmap foo ! CheckDefAndScriptFailure(['maparg(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['maparg("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['maparg("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) ! CheckDefAndScriptFailure(['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 --- 2295,2304 ---- rhs: 'bar', buffer: 0}) unmap foo ! v9.CheckDefAndScriptFailure(['maparg(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['maparg("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['maparg("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) ! v9.CheckDefAndScriptFailure(['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 *************** *** 2308,2338 **** iabbrev foo foobar mapcheck('foo', 'i', true)->assert_equal('foobar') iunabbrev foo ! CheckDefAndScriptFailure(['mapcheck(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['mapcheck("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() if has('channel') ! CheckDefAndScriptFailure(['mapnew(test_null_job(), "1")'], ['E1013: Argument 1: type mismatch, expected list but got job', 'E1251: List, Dictionary, Blob or String required for argument 1']) endif ! CheckDefAndScriptFailure(['mapnew(1, "1")'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1251: List, Dictionary, Blob or String required for argument 1']) enddef def Test_mapset() ! CheckDefAndScriptFailure(['mapset(1, true, {})'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['mapset("a", 2, {})'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! CheckDefAndScriptFailure(['mapset("a", false, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_match() ! CheckDefAndScriptFailure(['match(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['match(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['match("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['match("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) assert_equal(2, match('ab12cd', '12')) assert_equal(-1, match('ab12cd', '34')) assert_equal(6, match('ab12cd12ef', '12', 4)) --- 2314,2344 ---- iabbrev foo foobar mapcheck('foo', 'i', true)->assert_equal('foobar') iunabbrev foo ! v9.CheckDefAndScriptFailure(['mapcheck(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['mapcheck("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() if has('channel') ! v9.CheckDefAndScriptFailure(['mapnew(test_null_job(), "1")'], ['E1013: Argument 1: type mismatch, expected list but got job', 'E1251: List, Dictionary, Blob or String required for argument 1']) endif ! v9.CheckDefAndScriptFailure(['mapnew(1, "1")'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1251: List, Dictionary, Blob or String required for argument 1']) enddef def Test_mapset() ! v9.CheckDefAndScriptFailure(['mapset(1, true, {})'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['mapset("a", 2, {})'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! v9.CheckDefAndScriptFailure(['mapset("a", false, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_match() ! v9.CheckDefAndScriptFailure(['match(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['match(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['match("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['match("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) assert_equal(2, match('ab12cd', '12')) assert_equal(-1, match('ab12cd', '34')) assert_equal(6, match('ab12cd12ef', '12', 4)) *************** *** 2347,2385 **** enddef def Test_matchadd() ! CheckDefAndScriptFailure(['matchadd(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['matchadd("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['matchadd("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['matchadd("a", "b", 1, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) ! CheckDefAndScriptFailure(['matchadd("a", "b", 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 5']) matchadd('', 'a')->assert_equal(-1) matchadd('Search', '')->assert_equal(-1) enddef def Test_matchaddpos() ! CheckDefAndScriptFailure(['matchaddpos(1, [1])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['matchaddpos("a", "b")'], ['E1013: Argument 2: type mismatch, expected list but got string', 'E1211: List required for argument 2']) ! CheckDefAndScriptFailure(['matchaddpos("a", [1], "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) ! CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 5']) matchaddpos('', [1])->assert_equal(-1) enddef def Test_matcharg() ! CheckDefAndScriptFailure(['matcharg("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_matchdelete() ! CheckDefAndScriptFailure(['matchdelete("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['matchdelete("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['matchdelete(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_matchend() ! CheckDefAndScriptFailure(['matchend(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['matchend(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['matchend("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['matchend("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) assert_equal(4, matchend('ab12cd', '12')) assert_equal(-1, matchend('ab12cd', '34')) assert_equal(8, matchend('ab12cd12ef', '12', 4)) --- 2353,2391 ---- enddef def Test_matchadd() ! v9.CheckDefAndScriptFailure(['matchadd(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchadd("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['matchadd("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['matchadd("a", "b", 1, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) ! v9.CheckDefAndScriptFailure(['matchadd("a", "b", 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 5']) matchadd('', 'a')->assert_equal(-1) matchadd('Search', '')->assert_equal(-1) enddef def Test_matchaddpos() ! v9.CheckDefAndScriptFailure(['matchaddpos(1, [1])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchaddpos("a", "b")'], ['E1013: Argument 2: type mismatch, expected list but got string', 'E1211: List required for argument 2']) ! v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) ! v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 5']) matchaddpos('', [1])->assert_equal(-1) enddef def Test_matcharg() ! v9.CheckDefAndScriptFailure(['matcharg("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_matchdelete() ! v9.CheckDefAndScriptFailure(['matchdelete("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchdelete("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchdelete(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_matchend() ! v9.CheckDefAndScriptFailure(['matchend(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchend(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['matchend("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['matchend("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) assert_equal(4, matchend('ab12cd', '12')) assert_equal(-1, matchend('ab12cd', '34')) assert_equal(8, matchend('ab12cd12ef', '12', 4)) *************** *** 2394,2417 **** enddef def Test_matchfuzzy() ! CheckDefAndScriptFailure(['matchfuzzy({}, "p")'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['matchfuzzy([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['matchfuzzypos({}, "p")'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['matchfuzzypos([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['matchlist(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['matchlist(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['matchlist("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['matchlist("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) var l: list = ['12', '', '', '', '', '', '', '', '', ''] assert_equal(l, matchlist('ab12cd', '12')) assert_equal([], matchlist('ab12cd', '34')) --- 2400,2423 ---- enddef def Test_matchfuzzy() ! v9.CheckDefAndScriptFailure(['matchfuzzy({}, "p")'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchfuzzy([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['matchfuzzypos({}, "p")'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchfuzzypos([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['matchlist(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchlist(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['matchlist("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['matchlist("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) var l: list = ['12', '', '', '', '', '', '', '', '', ''] assert_equal(l, matchlist('ab12cd', '12')) assert_equal([], matchlist('ab12cd', '34')) *************** *** 2429,2438 **** enddef def Test_matchstr() ! CheckDefAndScriptFailure(['matchstr(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['matchstr(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['matchstr("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['matchstr("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) assert_equal('12', matchstr('ab12cd', '12')) assert_equal('', matchstr('ab12cd', '34')) assert_equal('12', matchstr('ab12cd12ef', '12', 4)) --- 2435,2444 ---- enddef def Test_matchstr() ! v9.CheckDefAndScriptFailure(['matchstr(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchstr(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['matchstr("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['matchstr("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) assert_equal('12', matchstr('ab12cd', '12')) assert_equal('', matchstr('ab12cd', '34')) assert_equal('12', matchstr('ab12cd12ef', '12', 4)) *************** *** 2447,2456 **** enddef def Test_matchstrpos() ! CheckDefAndScriptFailure(['matchstrpos(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['matchstrpos(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['matchstrpos("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['matchstrpos("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) assert_equal(['12', 2, 4], matchstrpos('ab12cd', '12')) assert_equal(['', -1, -1], matchstrpos('ab12cd', '34')) assert_equal(['12', 6, 8], matchstrpos('ab12cd12ef', '12', 4)) --- 2453,2462 ---- enddef def Test_matchstrpos() ! v9.CheckDefAndScriptFailure(['matchstrpos(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['matchstrpos(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['matchstrpos("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['matchstrpos("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) assert_equal(['12', 2, 4], matchstrpos('ab12cd', '12')) assert_equal(['', -1, -1], matchstrpos('ab12cd', '34')) assert_equal(['12', 6, 8], matchstrpos('ab12cd12ef', '12', 4)) *************** *** 2478,2490 **** ? [1, max([2, 3])] : [4, 5] assert_equal([4, 5], l2) ! CheckDefAndScriptFailure(['max(5)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1227: List or Dictionary required for argument 1']) enddef def Test_menu_info() ! CheckDefAndScriptFailure(['menu_info(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['menu_info(10, "n")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['menu_info("File", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_equal({}, menu_info('aMenu')) enddef --- 2484,2496 ---- ? [1, max([2, 3])] : [4, 5] assert_equal([4, 5], l2) ! v9.CheckDefAndScriptFailure(['max(5)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1227: List or Dictionary required for argument 1']) enddef def Test_menu_info() ! v9.CheckDefAndScriptFailure(['menu_info(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['menu_info(10, "n")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['menu_info("File", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_equal({}, menu_info('aMenu')) enddef *************** *** 2500,2548 **** ? [1, min([2, 3])] : [4, 5] assert_equal([4, 5], l2) ! CheckDefAndScriptFailure(['min(5)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1227: List or Dictionary required for argument 1']) enddef def Test_mkdir() ! CheckDefAndScriptFailure(['mkdir(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['mkdir("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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 def Test_mode() ! CheckDefAndScriptFailure(['mode("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) ! CheckDefAndScriptFailure(['mode(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) enddef def Test_mzeval() if !has('mzscheme') CheckFeature mzscheme endif ! CheckDefAndScriptFailure(['mzeval(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_nextnonblank() ! CheckDefAndScriptFailure(['nextnonblank(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['nextnonblank("")'], 'E1209: Invalid value for a line number') assert_equal(0, nextnonblank(1)) enddef def Test_nr2char() nr2char(97, true)->assert_equal('a') ! CheckDefAndScriptFailure(['nr2char("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['nr2char(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2']) enddef def Test_or() ! CheckDefAndScriptFailure(['or("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['or(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_pathshorten() ! CheckDefAndScriptFailure(['pathshorten(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['pathshorten("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) pathshorten('')->assert_equal('') enddef --- 2506,2554 ---- ? [1, min([2, 3])] : [4, 5] assert_equal([4, 5], l2) ! v9.CheckDefAndScriptFailure(['min(5)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1227: List or Dictionary required for argument 1']) enddef def Test_mkdir() ! v9.CheckDefAndScriptFailure(['mkdir(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['mkdir("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['mkdir("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefExecAndScriptFailure(['mkdir("")'], 'E1175: Non-empty string required for argument 1') delete('a', 'rf') enddef def Test_mode() ! v9.CheckDefAndScriptFailure(['mode("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) ! v9.CheckDefAndScriptFailure(['mode(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) enddef def Test_mzeval() if !has('mzscheme') CheckFeature mzscheme endif ! v9.CheckDefAndScriptFailure(['mzeval(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_nextnonblank() ! v9.CheckDefAndScriptFailure(['nextnonblank(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['nextnonblank("")'], 'E1209: Invalid value for a line number') assert_equal(0, nextnonblank(1)) enddef def Test_nr2char() nr2char(97, true)->assert_equal('a') ! v9.CheckDefAndScriptFailure(['nr2char("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['nr2char(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2']) enddef def Test_or() ! v9.CheckDefAndScriptFailure(['or("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['or(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_pathshorten() ! v9.CheckDefAndScriptFailure(['pathshorten(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['pathshorten("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) pathshorten('')->assert_equal('') enddef *************** *** 2550,2561 **** if !has('perl') CheckFeature perl endif ! CheckDefAndScriptFailure(['perleval(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_popup_atcursor() ! CheckDefAndScriptFailure(['popup_atcursor({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! CheckDefAndScriptFailure(['popup_atcursor("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) # Pass variable of type 'any' to popup_atcursor() var what: any = 'Hello' --- 2556,2567 ---- if !has('perl') CheckFeature perl endif ! v9.CheckDefAndScriptFailure(['perleval(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_popup_atcursor() ! v9.CheckDefAndScriptFailure(['popup_atcursor({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_atcursor("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) # Pass variable of type 'any' to popup_atcursor() var what: any = 'Hello' *************** *** 2565,2581 **** enddef def Test_popup_beval() ! CheckDefAndScriptFailure(['popup_beval({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! CheckDefAndScriptFailure(['popup_beval("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_clear() ! CheckDefAndScriptFailure(['popup_clear(["a"])'], ['E1013: Argument 1: type mismatch, expected bool but got list', 'E1212: Bool required for argument 1']) ! CheckDefAndScriptFailure(['popup_clear(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) enddef def Test_popup_close() ! CheckDefAndScriptFailure(['popup_close("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_popup_create() --- 2571,2587 ---- enddef def Test_popup_beval() ! v9.CheckDefAndScriptFailure(['popup_beval({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_beval("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_clear() ! v9.CheckDefAndScriptFailure(['popup_clear(["a"])'], ['E1013: Argument 1: type mismatch, expected bool but got list', 'E1212: Bool required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_clear(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) enddef def Test_popup_close() ! v9.CheckDefAndScriptFailure(['popup_close("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_popup_create() *************** *** 2587,2667 **** enddef def Test_popup_dialog() ! CheckDefAndScriptFailure(['popup_dialog({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! CheckDefAndScriptFailure(['popup_dialog("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_filter_menu() ! CheckDefAndScriptFailure(['popup_filter_menu("x", "")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['popup_filter_yesno("x", "")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_filter_yesno(1, 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_popup_getoptions() ! CheckDefAndScriptFailure(['popup_getoptions("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_getoptions(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) enddef def Test_popup_getpos() ! CheckDefAndScriptFailure(['popup_getpos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_getpos(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) enddef def Test_popup_hide() ! CheckDefAndScriptFailure(['popup_hide("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_hide(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) enddef def Test_popup_locate() ! CheckDefAndScriptFailure(['popup_locate("a", 20)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_locate(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_popup_menu() ! CheckDefAndScriptFailure(['popup_menu({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! CheckDefAndScriptFailure(['popup_menu("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_move() ! CheckDefAndScriptFailure(['popup_move("x", {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_move(1, [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_notification() ! CheckDefAndScriptFailure(['popup_notification({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! CheckDefAndScriptFailure(['popup_notification("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_setoptions() ! CheckDefAndScriptFailure(['popup_setoptions("x", {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_setoptions(1, [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_settext() ! CheckDefAndScriptFailure(['popup_settext("x", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_settext(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2']) enddef def Test_popup_show() ! CheckDefAndScriptFailure(['popup_show("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['popup_show(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) enddef def Test_prevnonblank() ! CheckDefAndScriptFailure(['prevnonblank(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['prevnonblank("")'], 'E1209: Invalid value for a line number') assert_equal(0, prevnonblank(1)) enddef def Test_printf() ! CheckDefAndScriptFailure(['printf([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) printf(0x10)->assert_equal('16') assert_equal(" abc", "abc"->printf("%4s")) enddef --- 2593,2673 ---- enddef def Test_popup_dialog() ! v9.CheckDefAndScriptFailure(['popup_dialog({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_dialog("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_filter_menu() ! v9.CheckDefAndScriptFailure(['popup_filter_menu("x", "")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['popup_filter_yesno("x", "")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_filter_yesno(1, 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_popup_getoptions() ! v9.CheckDefAndScriptFailure(['popup_getoptions("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_getoptions(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) enddef def Test_popup_getpos() ! v9.CheckDefAndScriptFailure(['popup_getpos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_getpos(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) enddef def Test_popup_hide() ! v9.CheckDefAndScriptFailure(['popup_hide("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_hide(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) enddef def Test_popup_locate() ! v9.CheckDefAndScriptFailure(['popup_locate("a", 20)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_locate(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_popup_menu() ! v9.CheckDefAndScriptFailure(['popup_menu({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_menu("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_move() ! v9.CheckDefAndScriptFailure(['popup_move("x", {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_move(1, [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_notification() ! v9.CheckDefAndScriptFailure(['popup_notification({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_notification("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_setoptions() ! v9.CheckDefAndScriptFailure(['popup_setoptions("x", {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_setoptions(1, [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_popup_settext() ! v9.CheckDefAndScriptFailure(['popup_settext("x", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_settext(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2']) enddef def Test_popup_show() ! v9.CheckDefAndScriptFailure(['popup_show("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['popup_show(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) enddef def Test_prevnonblank() ! v9.CheckDefAndScriptFailure(['prevnonblank(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['prevnonblank("")'], 'E1209: Invalid value for a line number') assert_equal(0, prevnonblank(1)) enddef def Test_printf() ! v9.CheckDefAndScriptFailure(['printf([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) printf(0x10)->assert_equal('16') assert_equal(" abc", "abc"->printf("%4s")) enddef *************** *** 2670,2676 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['prompt_getprompt([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) assert_equal('', prompt_getprompt('NonExistingBuf')) endif enddef --- 2676,2682 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['prompt_getprompt([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) assert_equal('', prompt_getprompt('NonExistingBuf')) endif enddef *************** *** 2679,2685 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['prompt_setcallback(true, "1")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) endif enddef --- 2685,2691 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['prompt_setcallback(true, "1")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) endif enddef *************** *** 2687,2693 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['prompt_setinterrupt(true, "1")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) endif enddef --- 2693,2699 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['prompt_setinterrupt(true, "1")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) endif enddef *************** *** 2695,2810 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure(['prompt_setprompt([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['prompt_setprompt(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) endif enddef def Test_prop_add() ! CheckDefAndScriptFailure(['prop_add("a", 2, {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['prop_add(1, "b", {})'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['prop_add(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_prop_add_list() ! CheckDefAndScriptFailure(['prop_add_list([], [])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! CheckDefAndScriptFailure(['prop_add_list({}, {})'], ['E1013: Argument 2: type mismatch, expected list but got dict', 'E1211: List required for argument 2']) enddef def Test_prop_clear() ! CheckDefAndScriptFailure(['prop_clear("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['prop_clear(1, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['prop_clear(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_prop_find() ! CheckDefAndScriptFailure(['prop_find([1, 2])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! CheckDefAndScriptFailure(['prop_find([1, 2], "k")'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['prop_list("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['prop_list(1, [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_prop_remove() ! CheckDefAndScriptFailure(['prop_remove([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! CheckDefAndScriptFailure(['prop_remove({}, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['prop_remove({}, 1, "b")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_prop_type_add() ! CheckDefAndScriptFailure(['prop_type_add({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['prop_type_change({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['prop_type_delete({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['prop_type_delete({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['prop_type_get({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['prop_type_get({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['prop_type_list(["a"])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! CheckDefAndScriptFailure(['prop_type_list(2)'], ['E1013: Argument 1: type mismatch, expected dict but got number', 'E1206: Dictionary required for argument 1']) enddef def Test_py3eval() if !has('python3') CheckFeature python3 endif ! CheckDefAndScriptFailure(['py3eval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_pyeval() if !has('python') CheckFeature python endif ! CheckDefAndScriptFailure(['pyeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_pyxeval() if !has('python') && !has('python3') CheckFeature python endif ! CheckDefAndScriptFailure(['pyxeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_rand() ! CheckDefAndScriptFailure(['rand(10)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(rand() >= 0) assert_true(rand(srand()) >= 0) enddef def Test_range() ! CheckDefAndScriptFailure(['range("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['range(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['range(10, 20, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_readdir() eval expand('sautest')->readdir((e) => e[0] !=# '.') eval expand('sautest')->readdirex((e) => e.name[0] !=# '.') ! CheckDefAndScriptFailure(['readdir(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['readdir("a", "1", [3])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) if has('unix') # only fails on Unix-like systems assert_fails('readdir("")', 'E484: Can''t open file') --- 2701,2816 ---- if !has('channel') CheckFeature channel else ! v9.CheckDefAndScriptFailure(['prompt_setprompt([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['prompt_setprompt(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) endif enddef def Test_prop_add() ! v9.CheckDefAndScriptFailure(['prop_add("a", 2, {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_add(1, "b", {})'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['prop_add(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_prop_add_list() ! v9.CheckDefAndScriptFailure(['prop_add_list([], [])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_add_list({}, {})'], ['E1013: Argument 2: type mismatch, expected list but got dict', 'E1211: List required for argument 2']) enddef def Test_prop_clear() ! v9.CheckDefAndScriptFailure(['prop_clear("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_clear(1, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['prop_clear(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_prop_find() ! v9.CheckDefAndScriptFailure(['prop_find([1, 2])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_find([1, 2], "k")'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['prop_list("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_list(1, [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_prop_remove() ! v9.CheckDefAndScriptFailure(['prop_remove([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_remove({}, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['prop_remove({}, 1, "b")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_prop_type_add() ! v9.CheckDefAndScriptFailure(['prop_type_add({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['prop_type_change({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['prop_type_delete({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_type_delete({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['prop_type_get({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_type_get({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['prop_type_list(["a"])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) ! v9.CheckDefAndScriptFailure(['prop_type_list(2)'], ['E1013: Argument 1: type mismatch, expected dict but got number', 'E1206: Dictionary required for argument 1']) enddef def Test_py3eval() if !has('python3') CheckFeature python3 endif ! v9.CheckDefAndScriptFailure(['py3eval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_pyeval() if !has('python') CheckFeature python endif ! v9.CheckDefAndScriptFailure(['pyeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_pyxeval() if !has('python') && !has('python3') CheckFeature python endif ! v9.CheckDefAndScriptFailure(['pyxeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_rand() ! v9.CheckDefAndScriptFailure(['rand(10)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! v9.CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(rand() >= 0) assert_true(rand(srand()) >= 0) enddef def Test_range() ! v9.CheckDefAndScriptFailure(['range("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['range(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['range(10, 20, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_readdir() eval expand('sautest')->readdir((e) => e[0] !=# '.') eval expand('sautest')->readdirex((e) => e.name[0] !=# '.') ! v9.CheckDefAndScriptFailure(['readdir(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['readdir("a", "1", [3])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) if has('unix') # only fails on Unix-like systems assert_fails('readdir("")', 'E484: Can''t open file') *************** *** 2812,2819 **** enddef def Test_readdirex() ! CheckDefAndScriptFailure(['readdirex(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['readdirex("a", "1", [3])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) if has('unix') # only fails on Unix-like systems assert_fails('readdirex("")', 'E484: Can''t open file') --- 2818,2825 ---- enddef def Test_readdirex() ! v9.CheckDefAndScriptFailure(['readdirex(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['readdirex("a", "1", [3])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) if has('unix') # only fails on Unix-like systems assert_fails('readdirex("")', 'E484: Can''t open file') *************** *** 2829,2836 **** var lines =<< trim END var read: list = readblob('Xreadblob') END ! CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list but got blob', 1) ! CheckDefExecAndScriptFailure(['readblob("")'], 'E484: Can''t open file ') delete('Xreadblob') enddef --- 2835,2842 ---- var lines =<< trim END var read: list = readblob('Xreadblob') END ! v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list but got blob', 1) ! v9.CheckDefExecAndScriptFailure(['readblob("")'], 'E484: Can''t open file ') delete('Xreadblob') enddef *************** *** 2843,2858 **** var lines =<< trim END var read: dict = readfile('Xreadfile') END ! CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected dict but got list', 1) delete('Xreadfile') ! CheckDefAndScriptFailure(['readfile("a", 0z10)'], ['E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['reduce({a: 10}, "1")'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1252: String, List or Blob required for argument 1']) assert_equal(6, [1, 2, 3]->reduce((r, c) => r + c, 0)) assert_equal(11, 0z0506->reduce((r, c) => r + c, 0)) enddef --- 2849,2864 ---- var lines =<< trim END var read: dict = readfile('Xreadfile') END ! v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected dict but got list', 1) delete('Xreadfile') ! v9.CheckDefAndScriptFailure(['readfile("a", 0z10)'], ['E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['readfile("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefExecAndScriptFailure(['readfile("")'], 'E1175: Non-empty string required for argument 1') enddef def Test_reduce() ! v9.CheckDefAndScriptFailure(['reduce({a: 10}, "1")'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1252: String, List or Blob required for argument 1']) assert_equal(6, [1, 2, 3]->reduce((r, c) => r + c, 0)) assert_equal(11, 0z0506->reduce((r, c) => r + c, 0)) enddef *************** *** 2860,2872 **** def Test_reltime() CheckFeature reltime ! CheckDefExecAndScriptFailure(['[]->reltime()'], 'E474:') ! CheckDefExecAndScriptFailure(['[]->reltime([])'], 'E474:') ! CheckDefAndScriptFailure(['reltime("x")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefFailure(['reltime(["x", "y"])'], 'E1013: Argument 1: type mismatch, expected list but got list') ! CheckDefAndScriptFailure(['reltime([1, 2], 10)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! CheckDefFailure(['reltime([1, 2], ["a", "b"])'], 'E1013: Argument 2: type mismatch, expected list but got list') var start: list = reltime() assert_true(type(reltime(start)) == v:t_list) var end: list = reltime() --- 2866,2878 ---- def Test_reltime() CheckFeature reltime ! v9.CheckDefExecAndScriptFailure(['[]->reltime()'], 'E474:') ! v9.CheckDefExecAndScriptFailure(['[]->reltime([])'], 'E474:') ! v9.CheckDefAndScriptFailure(['reltime("x")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefFailure(['reltime(["x", "y"])'], 'E1013: Argument 1: type mismatch, expected list but got list') ! v9.CheckDefAndScriptFailure(['reltime([1, 2], 10)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! v9.CheckDefFailure(['reltime([1, 2], ["a", "b"])'], 'E1013: Argument 2: type mismatch, expected list but got list') var start: list = reltime() assert_true(type(reltime(start)) == v:t_list) var end: list = reltime() *************** *** 2876,2906 **** def Test_reltimefloat() CheckFeature reltime ! CheckDefExecAndScriptFailure(['[]->reltimefloat()'], 'E474:') ! CheckDefAndScriptFailure(['reltimefloat("x")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefFailure(['reltimefloat([1.1])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(type(reltimefloat(reltime())) == v:t_float) enddef def Test_reltimestr() CheckFeature reltime ! CheckDefExecAndScriptFailure(['[]->reltimestr()'], 'E474:') ! CheckDefAndScriptFailure(['reltimestr(true)'], ['E1013: Argument 1: type mismatch, expected list but got bool', 'E1211: List required for argument 1']) ! CheckDefFailure(['reltimestr([true])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(type(reltimestr(reltime())) == v:t_string) enddef def Test_remote_expr() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefAndScriptFailure(['remote_expr(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['remote_expr("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['remote_expr("a", "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) ! CheckDefAndScriptFailure(['remote_expr("a", "b", "c", "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) ! CheckDefExecAndScriptFailure(['remote_expr("", "")'], 'E241: Unable to send to ') enddef def Test_remote_foreground() --- 2882,2912 ---- def Test_reltimefloat() CheckFeature reltime ! v9.CheckDefExecAndScriptFailure(['[]->reltimefloat()'], 'E474:') ! v9.CheckDefAndScriptFailure(['reltimefloat("x")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefFailure(['reltimefloat([1.1])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(type(reltimefloat(reltime())) == v:t_float) enddef def Test_reltimestr() CheckFeature reltime ! v9.CheckDefExecAndScriptFailure(['[]->reltimestr()'], 'E474:') ! v9.CheckDefAndScriptFailure(['reltimestr(true)'], ['E1013: Argument 1: type mismatch, expected list but got bool', 'E1211: List required for argument 1']) ! v9.CheckDefFailure(['reltimestr([true])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(type(reltimestr(reltime())) == v:t_string) enddef def Test_remote_expr() CheckFeature clientserver CheckEnv DISPLAY ! v9.CheckDefAndScriptFailure(['remote_expr(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['remote_expr("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['remote_expr("a", "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) ! v9.CheckDefAndScriptFailure(['remote_expr("a", "b", "c", "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) ! v9.CheckDefExecAndScriptFailure(['remote_expr("", "")'], 'E241: Unable to send to ') enddef def Test_remote_foreground() *************** *** 2909,2915 **** CheckNotMSWindows CheckEnv DISPLAY ! CheckDefAndScriptFailure(['remote_foreground(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) assert_fails('remote_foreground("NonExistingServer")', 'E241:') assert_fails('remote_foreground("")', 'E241:') enddef --- 2915,2921 ---- CheckNotMSWindows CheckEnv DISPLAY ! v9.CheckDefAndScriptFailure(['remote_foreground(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) assert_fails('remote_foreground("NonExistingServer")', 'E241:') assert_fails('remote_foreground("")', 'E241:') enddef *************** *** 2917,2948 **** def Test_remote_peek() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefAndScriptFailure(['remote_peek(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['remote_peek("a5b6c7", [1])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefExecAndScriptFailure(['remote_peek("")'], 'E573: Invalid server id used') enddef def Test_remote_read() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefAndScriptFailure(['remote_read(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['remote_read("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefExecAndScriptFailure(['remote_read("")'], 'E573: Invalid server id used') enddef def Test_remote_send() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefAndScriptFailure(['remote_send(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['remote_send("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['remote_send("a", "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) assert_fails('remote_send("", "")', 'E241:') enddef def Test_remote_startserver() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefAndScriptFailure(['remote_startserver({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) enddef def Test_remove_const_list() --- 2923,2954 ---- def Test_remote_peek() CheckFeature clientserver CheckEnv DISPLAY ! v9.CheckDefAndScriptFailure(['remote_peek(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['remote_peek("a5b6c7", [1])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['remote_peek("")'], 'E573: Invalid server id used') enddef def Test_remote_read() CheckFeature clientserver CheckEnv DISPLAY ! v9.CheckDefAndScriptFailure(['remote_read(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['remote_read("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['remote_read("")'], 'E573: Invalid server id used') enddef def Test_remote_send() CheckFeature clientserver CheckEnv DISPLAY ! v9.CheckDefAndScriptFailure(['remote_send(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['remote_send("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['remote_send("a", "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) assert_fails('remote_send("", "")', 'E241:') enddef def Test_remote_startserver() CheckFeature clientserver CheckEnv DISPLAY ! v9.CheckDefAndScriptFailure(['remote_startserver({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) enddef def Test_remove_const_list() *************** *** 2952,2963 **** enddef def Test_remove() ! CheckDefAndScriptFailure(['remove("a", 1)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1228: List, Dictionary or Blob required for argument 1']) ! CheckDefAndScriptFailure(['remove([], "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['remove([], 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['remove({}, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2']) ! CheckDefAndScriptFailure(['remove(0z10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['remove(0z20, 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) var l: any = [1, 2, 3, 4] remove(l, 1) assert_equal([1, 3, 4], l) --- 2958,2969 ---- enddef def Test_remove() ! v9.CheckDefAndScriptFailure(['remove("a", 1)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1228: List, Dictionary or Blob required for argument 1']) ! v9.CheckDefAndScriptFailure(['remove([], "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['remove([], 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['remove({}, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['remove(0z10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['remove(0z20, 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) var l: any = [1, 2, 3, 4] remove(l, 1) assert_equal([1, 3, 4], l) *************** *** 2986,2999 **** enddef def Test_rename() ! CheckDefAndScriptFailure(['rename(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['repeat(1.1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1224: String, Number or List required for argument 1']) ! CheckDefAndScriptFailure(['repeat({a: 10}, 2)'], ['E1013: Argument 1: type mismatch, expected string but got dict<', 'E1224: String, Number or List required for argument 1']) var lines =<< trim END assert_equal('aaa', repeat('a', 3)) assert_equal('111', repeat(1, 3)) --- 2992,3005 ---- enddef def Test_rename() ! v9.CheckDefAndScriptFailure(['rename(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['repeat(1.1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1224: String, Number or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['repeat({a: 10}, 2)'], ['E1013: Argument 1: type mismatch, expected string but got dict<', 'E1224: String, Number or List required for argument 1']) var lines =<< trim END assert_equal('aaa', repeat('a', 3)) assert_equal('111', repeat(1, 3)) *************** *** 3002,3019 **** s ..= repeat(5, 3) assert_equal('-555', s) END ! CheckDefAndScriptSuccess(lines) enddef def Test_resolve() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['reverse(10)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1226: List or Blob required for argument 1']) ! CheckDefAndScriptFailure(['reverse("abc")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1226: List or Blob required for argument 1']) enddef def Test_reverse_return_type() --- 3008,3025 ---- s ..= repeat(5, 3) assert_equal('-555', s) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_resolve() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['reverse(10)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1226: List or Blob required for argument 1']) ! v9.CheckDefAndScriptFailure(['reverse("abc")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1226: List or Blob required for argument 1']) enddef def Test_reverse_return_type() *************** *** 3029,3062 **** if !has('ruby') CheckFeature ruby endif ! CheckDefAndScriptFailure(['rubyeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_screenattr() ! CheckDefAndScriptFailure(['screenattr("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['screenattr(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_screenchar() ! CheckDefAndScriptFailure(['screenchar("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['screenchar(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_screenchars() ! CheckDefAndScriptFailure(['screenchars("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['screenchars(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_screenpos() ! CheckDefAndScriptFailure(['screenpos("a", 1, 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['screenpos(1, "b", 1)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['screenpos(1, 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) assert_equal({col: 1, row: 1, endcol: 1, curscol: 1}, screenpos(1, 1, 1)) enddef def Test_screenstring() ! CheckDefAndScriptFailure(['screenstring("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['screenstring(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_search() --- 3035,3068 ---- if !has('ruby') CheckFeature ruby endif ! v9.CheckDefAndScriptFailure(['rubyeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_screenattr() ! v9.CheckDefAndScriptFailure(['screenattr("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['screenattr(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_screenchar() ! v9.CheckDefAndScriptFailure(['screenchar("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['screenchar(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_screenchars() ! v9.CheckDefAndScriptFailure(['screenchars("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['screenchars(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_screenpos() ! v9.CheckDefAndScriptFailure(['screenpos("a", 1, 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['screenpos(1, "b", 1)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['screenpos(1, 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) assert_equal({col: 1, row: 1, endcol: 1, curscol: 1}, screenpos(1, 1, 1)) enddef def Test_screenstring() ! v9.CheckDefAndScriptFailure(['screenstring("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['screenstring(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_search() *************** *** 3088,3100 **** normal 0 assert_equal([0, 0], searchpos('this', '', 0, 0, 'col(".") > col')) bwipe! ! CheckDefAndScriptFailure(['search(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['search("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['search("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['search("a", "b", 3, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) new setline(1, "match this") ! CheckDefAndScriptFailure(['search("a", "", 9, 0, [0])'], ['E1013: Argument 5: type mismatch, expected func(...): any but got list', 'E730: Using a List as a String']) bwipe! enddef --- 3094,3106 ---- normal 0 assert_equal([0, 0], searchpos('this', '', 0, 0, 'col(".") > col')) bwipe! ! v9.CheckDefAndScriptFailure(['search(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['search("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['search("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['search("a", "b", 3, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) new setline(1, "match this") ! v9.CheckDefAndScriptFailure(['search("a", "", 9, 0, [0])'], ['E1013: Argument 5: type mismatch, expected func(...): any but got list', 'E730: Using a List as a String']) bwipe! enddef *************** *** 3110,3123 **** maxcount: 99, incomplete: 0}) bwipe! ! CheckDefAndScriptFailure(['searchcount([1])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) enddef def Test_searchdecl() searchdecl('blah', true, true)->assert_equal(1) ! CheckDefAndScriptFailure(['searchdecl(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['searchdecl("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! CheckDefAndScriptFailure(['searchdecl("a", true, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) enddef def Test_searchpair() --- 3116,3129 ---- maxcount: 99, incomplete: 0}) bwipe! ! v9.CheckDefAndScriptFailure(['searchcount([1])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) enddef def Test_searchdecl() searchdecl('blah', true, true)->assert_equal(1) ! v9.CheckDefAndScriptFailure(['searchdecl(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['searchdecl("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) ! v9.CheckDefAndScriptFailure(['searchdecl("a", true, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) enddef def Test_searchpair() *************** *** 3159,3165 **** enddef Fail() END ! CheckScriptSuccess(lines) assert_equal('yes', g:caught) unlet g:caught bwipe! --- 3165,3171 ---- enddef Fail() END ! v9.CheckScriptSuccess(lines) assert_equal('yes', g:caught) unlet g:caught bwipe! *************** *** 3167,3228 **** lines =<< trim END echo searchpair("a", "b", "c", "d", "f", 33) END ! CheckDefAndScriptFailure(lines, ['E1001: Variable not found: f', 'E475: Invalid argument: d']) var errors = ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'] ! CheckDefAndScriptFailure(['searchpair(1, "b", "c")'], errors) ! CheckDefAndScriptFailure(['searchpairpos(1, "b", "c")'], errors) errors = ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'] ! CheckDefAndScriptFailure(['searchpair("a", 2, "c")'], errors) ! CheckDefAndScriptFailure(['searchpairpos("a", 2, "c")'], errors) errors = ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'] ! CheckDefAndScriptFailure(['searchpair("a", "b", 3)'], errors) ! CheckDefAndScriptFailure(['searchpairpos("a", "b", 3)'], errors) errors = ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4'] ! CheckDefAndScriptFailure(['searchpair("a", "b", "c", 4)'], errors) new setline(1, "match this") errors = ['E1013: Argument 5: type mismatch, expected func(...): any but got list', 'E730: Using a List as a String'] ! CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", [0])'], errors) ! CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", [0])'], errors) bwipe! errors = ['E1013: Argument 6: type mismatch, expected number but got string', 'E1210: Number required for argument 6'] ! CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", "1", "f")'], errors) ! CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", "1", "f")'], errors) errors = ['E1013: Argument 7: type mismatch, expected number but got string', 'E1210: Number required for argument 7'] ! CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", "1", 3, "g")'], errors) ! CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", "1", 3, "g")'], errors) enddef def Test_searchpos() ! CheckDefAndScriptFailure(['searchpos(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['searchpos("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['searchpos("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['searchpos("a", "b", 3, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) new setline(1, "match this") ! CheckDefAndScriptFailure(['searchpos("a", "", 9, 0, [0])'], ['E1013: Argument 5: type mismatch, expected func(...): any but got list', 'E730: Using a List as a String']) bwipe! enddef def Test_server2client() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefAndScriptFailure(['server2client(10, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['server2client("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefExecAndScriptFailure(['server2client("", "a")'], 'E573: Invalid server id used') ! CheckDefExecAndScriptFailure(['server2client("", "")'], 'E573: Invalid server id used') enddef def Test_shellescape() ! CheckDefAndScriptFailure(['shellescape(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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 --- 3173,3234 ---- lines =<< trim END echo searchpair("a", "b", "c", "d", "f", 33) END ! v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: f', 'E475: Invalid argument: d']) var errors = ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'] ! v9.CheckDefAndScriptFailure(['searchpair(1, "b", "c")'], errors) ! v9.CheckDefAndScriptFailure(['searchpairpos(1, "b", "c")'], errors) errors = ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'] ! v9.CheckDefAndScriptFailure(['searchpair("a", 2, "c")'], errors) ! v9.CheckDefAndScriptFailure(['searchpairpos("a", 2, "c")'], errors) errors = ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'] ! v9.CheckDefAndScriptFailure(['searchpair("a", "b", 3)'], errors) ! v9.CheckDefAndScriptFailure(['searchpairpos("a", "b", 3)'], errors) errors = ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4'] ! v9.CheckDefAndScriptFailure(['searchpair("a", "b", "c", 4)'], errors) new setline(1, "match this") errors = ['E1013: Argument 5: type mismatch, expected func(...): any but got list', 'E730: Using a List as a String'] ! v9.CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", [0])'], errors) ! v9.CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", [0])'], errors) bwipe! errors = ['E1013: Argument 6: type mismatch, expected number but got string', 'E1210: Number required for argument 6'] ! v9.CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", "1", "f")'], errors) ! v9.CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", "1", "f")'], errors) errors = ['E1013: Argument 7: type mismatch, expected number but got string', 'E1210: Number required for argument 7'] ! v9.CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", "1", 3, "g")'], errors) ! v9.CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", "1", 3, "g")'], errors) enddef def Test_searchpos() ! v9.CheckDefAndScriptFailure(['searchpos(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['searchpos("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['searchpos("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['searchpos("a", "b", 3, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) new setline(1, "match this") ! v9.CheckDefAndScriptFailure(['searchpos("a", "", 9, 0, [0])'], ['E1013: Argument 5: type mismatch, expected func(...): any but got list', 'E730: Using a List as a String']) bwipe! enddef def Test_server2client() CheckFeature clientserver CheckEnv DISPLAY ! v9.CheckDefAndScriptFailure(['server2client(10, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['server2client("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['server2client("", "a")'], 'E573: Invalid server id used') ! v9.CheckDefExecAndScriptFailure(['server2client("", "")'], 'E573: Invalid server id used') enddef def Test_shellescape() ! v9.CheckDefAndScriptFailure(['shellescape(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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 *************** *** 3275,3281 **** exe 'bwipe! ' .. b END ! CheckDefAndScriptSuccess(lines) enddef def Test_setbufvar() --- 3281,3287 ---- exe 'bwipe! ' .. b END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_setbufvar() *************** *** 3302,3309 **** setbufvar('%', 'myvar', 123) getbufvar('%', 'myvar')->assert_equal(123) ! CheckDefAndScriptFailure(['setbufvar(true, "v", 3)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['setbufvar(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_fails('setbufvar("%", "", 10)', 'E461: Illegal variable name') enddef --- 3308,3315 ---- setbufvar('%', 'myvar', 123) getbufvar('%', 'myvar')->assert_equal(123) ! v9.CheckDefAndScriptFailure(['setbufvar(true, "v", 3)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['setbufvar(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_fails('setbufvar("%", "", 10)', 'E461: Illegal variable name') enddef *************** *** 3316,3325 **** setbufline(bnum, 5, 10) setbufline(bnum, 6, ['two', 11]) assert_equal(['1', '2', '3', 'one', '10', 'two', '11'], getbufline(bnum, 1, '$')) ! CheckDefAndScriptFailure(['setbufline([1], 1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['setbufline(1, [1], "x")'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) ! CheckDefExecAndScriptFailure(['setbufline(' .. bnum .. ', -1, "x")'], 'E966: Invalid line number: -1') ! CheckDefAndScriptFailure(['setbufline(1, 1, {"a": 10})'], ['E1013: Argument 3: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 3']) bnum->bufwinid()->win_gotoid() setbufline('', 1, 'nombres') getline(1)->assert_equal('nombres') --- 3322,3331 ---- setbufline(bnum, 5, 10) setbufline(bnum, 6, ['two', 11]) assert_equal(['1', '2', '3', 'one', '10', 'two', '11'], getbufline(bnum, 1, '$')) ! v9.CheckDefAndScriptFailure(['setbufline([1], 1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['setbufline(1, [1], "x")'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['setbufline(' .. bnum .. ', -1, "x")'], 'E966: Invalid line number: -1') ! v9.CheckDefAndScriptFailure(['setbufline(1, 1, {"a": 10})'], ['E1013: Argument 3: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 3']) bnum->bufwinid()->win_gotoid() setbufline('', 1, 'nombres') getline(1)->assert_equal('nombres') *************** *** 3327,3373 **** enddef def Test_setcellwidths() ! CheckDefAndScriptFailure(['setcellwidths(1)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['setcellwidths({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) enddef def Test_setcharpos() ! CheckDefAndScriptFailure(['setcharpos(1, [])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefFailure(['setcharpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list but got list') ! CheckDefAndScriptFailure(['setcharpos(".", 1)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! CheckDefExecAndScriptFailure(['setcharpos("", [0, 1, 1, 1])'], 'E474: Invalid argument') enddef def Test_setcharsearch() ! CheckDefAndScriptFailure(['setcharsearch("x")'], ['E1013: Argument 1: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 1']) ! CheckDefAndScriptFailure(['setcharsearch([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) var d: dict = {char: 'x', forward: 1, until: 1} setcharsearch(d) assert_equal(d, getcharsearch()) enddef def Test_setcmdpos() ! CheckDefAndScriptFailure(['setcmdpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_setcursorcharpos() ! CheckDefAndScriptFailure(['setcursorcharpos(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1']) ! CheckDefAndScriptFailure(['setcursorcharpos(1, "2")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['setcursorcharpos(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefExecAndScriptFailure(['setcursorcharpos("", 10)'], 'E1209: Invalid value for a line number') enddef def Test_setenv() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['setfperm(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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 --- 3333,3379 ---- enddef def Test_setcellwidths() ! v9.CheckDefAndScriptFailure(['setcellwidths(1)'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['setcellwidths({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) enddef def Test_setcharpos() ! v9.CheckDefAndScriptFailure(['setcharpos(1, [])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefFailure(['setcharpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list but got list') ! v9.CheckDefAndScriptFailure(['setcharpos(".", 1)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['setcharpos("", [0, 1, 1, 1])'], 'E474: Invalid argument') enddef def Test_setcharsearch() ! v9.CheckDefAndScriptFailure(['setcharsearch("x")'], ['E1013: Argument 1: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 1']) ! v9.CheckDefAndScriptFailure(['setcharsearch([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) var d: dict = {char: 'x', forward: 1, until: 1} setcharsearch(d) assert_equal(d, getcharsearch()) enddef def Test_setcmdpos() ! v9.CheckDefAndScriptFailure(['setcmdpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_setcursorcharpos() ! v9.CheckDefAndScriptFailure(['setcursorcharpos(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['setcursorcharpos(1, "2")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['setcursorcharpos(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefExecAndScriptFailure(['setcursorcharpos("", 10)'], 'E1209: Invalid value for a line number') enddef def Test_setenv() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['setfperm(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['setfperm("a", 0z10)'], ['E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['setfperm("Xfile", "")'], 'E475: Invalid argument') ! v9.CheckDefExecAndScriptFailure(['setfperm("", "")'], 'E475: Invalid argument') assert_equal(0, setfperm('', 'rw-r--r--')) enddef *************** *** 3381,3389 **** assert_equal(['one', 'b', 'c', 'd'], getline(1, '$')) setline(1, 10) assert_equal(['10', 'b', 'c', 'd'], getline(1, '$')) ! CheckDefAndScriptFailure(['setline([1], "x")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefExecAndScriptFailure(['setline("", "x")'], 'E1209: Invalid value for a line number') ! CheckDefExecAndScriptFailure(['setline(-1, "x")'], 'E966: Invalid line number: -1') assert_fails('setline(".a", "x")', ['E1209:', 'E1209:']) bw! enddef --- 3387,3395 ---- assert_equal(['one', 'b', 'c', 'd'], getline(1, '$')) setline(1, 10) assert_equal(['10', 'b', 'c', 'd'], getline(1, '$')) ! v9.CheckDefAndScriptFailure(['setline([1], "x")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['setline("", "x")'], 'E1209: Invalid value for a line number') ! v9.CheckDefExecAndScriptFailure(['setline(-1, "x")'], 'E966: Invalid line number: -1') assert_fails('setline(".a", "x")', ['E1209:', 'E1209:']) bw! enddef *************** *** 3393,3420 **** var what = {items: items} setqflist([], ' ', what) setloclist(0, [], ' ', what) ! CheckDefAndScriptFailure(['setloclist("1", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['setloclist(1, 2)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! CheckDefAndScriptFailure(['setloclist(1, [], 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) ! CheckDefAndScriptFailure(['setloclist(1, [], "a", [])'], ['E1013: Argument 4: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 4']) enddef def Test_setmatches() ! CheckDefAndScriptFailure(['setmatches({})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['setmatches([], "1")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_setpos() ! CheckDefAndScriptFailure(['setpos(1, [])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefFailure(['setpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list but got list') ! CheckDefAndScriptFailure(['setpos(".", 1)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! CheckDefExecAndScriptFailure(['setpos("", [0, 1, 1, 1])'], 'E474: Invalid argument') enddef def Test_setqflist() ! CheckDefAndScriptFailure(['setqflist(1, "")'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['setqflist([], 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['setqflist([], "", [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_setreg() --- 3399,3426 ---- var what = {items: items} setqflist([], ' ', what) setloclist(0, [], ' ', what) ! v9.CheckDefAndScriptFailure(['setloclist("1", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['setloclist(1, 2)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! v9.CheckDefAndScriptFailure(['setloclist(1, [], 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) ! v9.CheckDefAndScriptFailure(['setloclist(1, [], "a", [])'], ['E1013: Argument 4: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 4']) enddef def Test_setmatches() ! v9.CheckDefAndScriptFailure(['setmatches({})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['setmatches([], "1")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_setpos() ! v9.CheckDefAndScriptFailure(['setpos(1, [])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefFailure(['setpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list but got list') ! v9.CheckDefAndScriptFailure(['setpos(".", 1)'], ['E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['setpos("", [0, 1, 1, 1])'], 'E474: Invalid argument') enddef def Test_setqflist() ! v9.CheckDefAndScriptFailure(['setqflist(1, "")'], ['E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['setqflist([], 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['setqflist([], "", [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_setreg() *************** *** 3423,3532 **** setreg('a', reginfo) getreginfo('a')->assert_equal(reginfo) assert_fails('setreg("ab", 0)', 'E1162:') ! CheckDefAndScriptFailure(['setreg(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['settabvar("a", "b", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['settabvar(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_fails('settabvar(1, "", 10)', 'E461: Illegal variable name') enddef def Test_settabwinvar() ! CheckDefAndScriptFailure(['settabwinvar("a", 2, "c", true)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['settabwinvar(1, "b", "c", [])'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['settabwinvar(1, 1, 3, {})'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) assert_fails('settabwinvar(1, 1, "", 10)', 'E461: Illegal variable name') enddef def Test_settagstack() ! CheckDefAndScriptFailure(['settagstack(true, {})'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['settagstack(1, [1])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['setwinvar("a", "b", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['setwinvar(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_fails('setwinvar(1, "", 10)', 'E461: Illegal variable name') enddef def Test_sha256() ! CheckDefAndScriptFailure(['sha256(100)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['shiftwidth("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_sign_define() ! CheckDefAndScriptFailure(['sign_define({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['sign_define({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['sign_define("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_sign_getdefined() ! CheckDefAndScriptFailure(['sign_getdefined(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['sign_getplaced(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['sign_getplaced(1, ["a"])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! CheckDefAndScriptFailure(['sign_getplaced("a", 1.1)'], ['E1013: Argument 2: type mismatch, expected dict but got float', 'E1206: Dictionary required for argument 2']) ! CheckDefExecAndScriptFailure(['sign_getplaced(bufnr(), {lnum: ""})'], 'E1030: Using a String as a Number:') sign_getplaced('')->assert_equal([{signs: [], bufnr: bufnr()}]) enddef def Test_sign_jump() ! CheckDefAndScriptFailure(['sign_jump("a", "b", "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['sign_jump(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['sign_jump(1, "b", true)'], ['E1013: Argument 3: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 3']) enddef def Test_sign_place() ! CheckDefAndScriptFailure(['sign_place("a", "b", "c", "d")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['sign_place(1, 2, "c", "d")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['sign_place(1, "b", 3, "d")'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) ! CheckDefAndScriptFailure(['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']) ! CheckDefAndScriptFailure(['sign_place(1, "b", "c", "d", [1])'], ['E1013: Argument 5: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 5']) ! CheckDefExecAndScriptFailure(['sign_place(0, "", "MySign", bufnr(), {lnum: ""})'], 'E1209: Invalid value for a line number: ""') assert_fails("sign_place(0, '', '', '')", 'E155:') enddef def Test_sign_placelist() ! CheckDefAndScriptFailure(['sign_placelist("x")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['sign_placelist({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! CheckDefExecAndScriptFailure(['sign_placelist([{"name": "MySign", "buffer": bufnr(), "lnum": ""}])'], 'E1209: Invalid value for a line number: ""') assert_fails('sign_placelist([{name: "MySign", buffer: "", lnum: 1}])', 'E155:') enddef def Test_sign_undefine() ! CheckDefAndScriptFailure(['sign_undefine({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['sign_undefine([1])'], ['E1013: Argument 1: type mismatch, expected list but got list', 'E155: Unknown sign:']) enddef def Test_sign_unplace() ! CheckDefAndScriptFailure(['sign_unplace({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['sign_unplace({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['sign_unplace("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_sign_unplacelist() ! CheckDefAndScriptFailure(['sign_unplacelist("x")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['sign_unplacelist({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) enddef def Test_simplify() ! CheckDefAndScriptFailure(['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 --- 3429,3538 ---- setreg('a', reginfo) getreginfo('a')->assert_equal(reginfo) assert_fails('setreg("ab", 0)', 'E1162:') ! v9.CheckDefAndScriptFailure(['setreg(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['settabvar("a", "b", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['settabvar(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_fails('settabvar(1, "", 10)', 'E461: Illegal variable name') enddef def Test_settabwinvar() ! v9.CheckDefAndScriptFailure(['settabwinvar("a", 2, "c", true)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['settabwinvar(1, "b", "c", [])'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['settabwinvar(1, 1, 3, {})'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) assert_fails('settabwinvar(1, 1, "", 10)', 'E461: Illegal variable name') enddef def Test_settagstack() ! v9.CheckDefAndScriptFailure(['settagstack(true, {})'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['settagstack(1, [1])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['setwinvar("a", "b", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['setwinvar(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_fails('setwinvar(1, "", 10)', 'E461: Illegal variable name') enddef def Test_sha256() ! v9.CheckDefAndScriptFailure(['sha256(100)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['shiftwidth("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_sign_define() ! v9.CheckDefAndScriptFailure(['sign_define({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_define({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_define("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_sign_getdefined() ! v9.CheckDefAndScriptFailure(['sign_getdefined(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['sign_getplaced(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_getplaced(1, ["a"])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! v9.CheckDefAndScriptFailure(['sign_getplaced("a", 1.1)'], ['E1013: Argument 2: type mismatch, expected dict but got float', 'E1206: Dictionary required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['sign_getplaced(bufnr(), {lnum: ""})'], 'E1030: Using a String as a Number:') sign_getplaced('')->assert_equal([{signs: [], bufnr: bufnr()}]) enddef def Test_sign_jump() ! v9.CheckDefAndScriptFailure(['sign_jump("a", "b", "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_jump(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['sign_jump(1, "b", true)'], ['E1013: Argument 3: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 3']) enddef def Test_sign_place() ! v9.CheckDefAndScriptFailure(['sign_place("a", "b", "c", "d")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_place(1, 2, "c", "d")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['sign_place(1, "b", 3, "d")'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) ! v9.CheckDefAndScriptFailure(['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']) ! v9.CheckDefAndScriptFailure(['sign_place(1, "b", "c", "d", [1])'], ['E1013: Argument 5: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 5']) ! v9.CheckDefExecAndScriptFailure(['sign_place(0, "", "MySign", bufnr(), {lnum: ""})'], 'E1209: Invalid value for a line number: ""') assert_fails("sign_place(0, '', '', '')", 'E155:') enddef def Test_sign_placelist() ! v9.CheckDefAndScriptFailure(['sign_placelist("x")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_placelist({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['sign_placelist([{"name": "MySign", "buffer": bufnr(), "lnum": ""}])'], 'E1209: Invalid value for a line number: ""') assert_fails('sign_placelist([{name: "MySign", buffer: "", lnum: 1}])', 'E155:') enddef def Test_sign_undefine() ! v9.CheckDefAndScriptFailure(['sign_undefine({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_undefine([1])'], ['E1013: Argument 1: type mismatch, expected list but got list', 'E155: Unknown sign:']) enddef def Test_sign_unplace() ! v9.CheckDefAndScriptFailure(['sign_unplace({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_unplace({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_unplace("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) enddef def Test_sign_unplacelist() ! v9.CheckDefAndScriptFailure(['sign_unplacelist("x")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['sign_unplacelist({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) enddef def Test_simplify() ! v9.CheckDefAndScriptFailure(['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 *************** *** 3552,3560 **** assert_equal(0z11, slice(0z001122334455, 1, -4)) assert_equal(0z, slice(0z001122334455, 1, -5)) assert_equal(0z, slice(0z001122334455, 1, -6)) ! CheckDefAndScriptFailure(['slice({"a": 10}, 1)'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['slice([1, 2, 3], "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['slice("abc", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_spellsuggest() --- 3558,3566 ---- assert_equal(0z11, slice(0z001122334455, 1, -4)) assert_equal(0z, slice(0z001122334455, 1, -5)) assert_equal(0z, slice(0z001122334455, 1, -6)) ! v9.CheckDefAndScriptFailure(['slice({"a": 10}, 1)'], ['E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['slice([1, 2, 3], "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['slice("abc", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_spellsuggest() *************** *** 3563,3591 **** else spellsuggest('marrch', 1, true)->assert_equal(['March']) endif ! CheckDefAndScriptFailure(['spellsuggest(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['spellsuggest("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['spellsuggest("a", 1, 0z01)'], ['E1013: Argument 3: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 3']) spellsuggest('')->assert_equal([]) enddef def Test_sound_playevent() CheckFeature sound ! CheckDefAndScriptFailure(['sound_playevent(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) enddef def Test_sound_playfile() CheckFeature sound ! CheckDefAndScriptFailure(['sound_playfile(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) enddef def Test_sound_stop() CheckFeature sound ! CheckDefAndScriptFailure(['sound_stop("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_soundfold() ! CheckDefAndScriptFailure(['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 --- 3569,3597 ---- else spellsuggest('marrch', 1, true)->assert_equal(['March']) endif ! v9.CheckDefAndScriptFailure(['spellsuggest(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['spellsuggest("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['spellsuggest("a", 1, 0z01)'], ['E1013: Argument 3: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 3']) spellsuggest('')->assert_equal([]) enddef def Test_sound_playevent() CheckFeature sound ! v9.CheckDefAndScriptFailure(['sound_playevent(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) enddef def Test_sound_playfile() CheckFeature sound ! v9.CheckDefAndScriptFailure(['sound_playfile(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) enddef def Test_sound_stop() CheckFeature sound ! v9.CheckDefAndScriptFailure(['sound_stop("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_soundfold() ! v9.CheckDefAndScriptFailure(['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 *************** *** 3607,3615 **** sort(l, Compare) assert_equal([1, 2, 3, 4, 5, 6, 7, 8], l) END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(['sort("a")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['sort([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_sort_compare_func_fails() --- 3613,3621 ---- sort(l, Compare) assert_equal([1, 2, 3, 4, 5, 6, 7, 8], l) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(['sort("a")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['sort([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_sort_compare_func_fails() *************** *** 3624,3650 **** enddef def Test_spellbadword() ! CheckDefAndScriptFailure(['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() split(' aa bb ', '\W\+', true)->assert_equal(['', 'aa', 'bb', '']) ! CheckDefAndScriptFailure(['split(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['split("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['srand("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) type(srand(100))->assert_equal(v:t_list) enddef def Test_state() ! CheckDefAndScriptFailure(['state({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) assert_equal('', state('a')) enddef --- 3630,3656 ---- enddef def Test_spellbadword() ! v9.CheckDefAndScriptFailure(['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() split(' aa bb ', '\W\+', true)->assert_equal(['', 'aa', 'bb', '']) ! v9.CheckDefAndScriptFailure(['split(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['split("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['srand("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) type(srand(100))->assert_equal(v:t_list) enddef def Test_state() ! v9.CheckDefAndScriptFailure(['state({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) assert_equal('', state('a')) enddef *************** *** 3656,3668 **** str2float("2e-2")->assert_equal(0.02) str2float('')->assert_equal(0.0) ! CheckDefAndScriptFailure(['str2float(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) endif enddef def Test_str2list() ! CheckDefAndScriptFailure(['str2list(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['str2list("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) assert_equal([97], str2list('a')) assert_equal([97], str2list('a', 1)) assert_equal([97], str2list('a', true)) --- 3662,3674 ---- str2float("2e-2")->assert_equal(0.02) str2float('')->assert_equal(0.0) ! v9.CheckDefAndScriptFailure(['str2float(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) endif enddef def Test_str2list() ! v9.CheckDefAndScriptFailure(['str2list(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['str2list("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) assert_equal([97], str2list('a')) assert_equal([97], str2list('a', 1)) assert_equal([97], str2list('a', true)) *************** *** 3673,3701 **** str2nr("1'000'000", 10, true)->assert_equal(1000000) str2nr('')->assert_equal(0) ! CheckDefAndScriptFailure(['str2nr(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['str2nr("123", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['str2nr("123", 10, "x")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3']) enddef def Test_strcharlen() ! CheckDefAndScriptFailure(['strcharlen([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) "abc"->strcharlen()->assert_equal(3) strcharlen(99)->assert_equal(2) enddef def Test_strcharpart() ! CheckDefAndScriptFailure(['strcharpart(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['strcharpart("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['strcharpart("a", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['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() strchars("A\u20dd", true)->assert_equal(1) ! CheckDefAndScriptFailure(['strchars(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['strchars("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) assert_equal(3, strchars('abc')) assert_equal(3, strchars('abc', 1)) assert_equal(3, strchars('abc', true)) --- 3679,3707 ---- str2nr("1'000'000", 10, true)->assert_equal(1000000) str2nr('')->assert_equal(0) ! v9.CheckDefAndScriptFailure(['str2nr(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['str2nr("123", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['str2nr("123", 10, "x")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3']) enddef def Test_strcharlen() ! v9.CheckDefAndScriptFailure(['strcharlen([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) "abc"->strcharlen()->assert_equal(3) strcharlen(99)->assert_equal(2) enddef def Test_strcharpart() ! v9.CheckDefAndScriptFailure(['strcharpart(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['strcharpart("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['strcharpart("a", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['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() strchars("A\u20dd", true)->assert_equal(1) ! v9.CheckDefAndScriptFailure(['strchars(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['strchars("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) assert_equal(3, strchars('abc')) assert_equal(3, strchars('abc', 1)) assert_equal(3, strchars('abc', true)) *************** *** 3703,3778 **** enddef def Test_strdisplaywidth() ! CheckDefAndScriptFailure(['strdisplaywidth(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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') ! CheckDefAndScriptFailure(['strftime(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['strgetchar(1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['stridx([1], "b")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['stridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['strlen([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) "abc"->strlen()->assert_equal(3) strlen(99)->assert_equal(2) enddef def Test_strpart() ! CheckDefAndScriptFailure(['strpart(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['strpart("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['strpart("a", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['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') ! CheckDefAndScriptFailure(['strptime(10, "2021")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['strridx([1], "b")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['strridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['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 --- 3709,3784 ---- enddef def Test_strdisplaywidth() ! v9.CheckDefAndScriptFailure(['strdisplaywidth(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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') ! v9.CheckDefAndScriptFailure(['strftime(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['strgetchar(1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['stridx([1], "b")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['stridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['strlen([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) "abc"->strlen()->assert_equal(3) strlen(99)->assert_equal(2) enddef def Test_strpart() ! v9.CheckDefAndScriptFailure(['strpart(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['strpart("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['strpart("a", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['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') ! v9.CheckDefAndScriptFailure(['strptime(10, "2021")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['strridx([1], "b")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['strridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['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 *************** *** 3783,3790 **** var actual = substitute('A123456789', pat, Rep, '') var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]" actual->assert_equal(expected) ! CheckDefAndScriptFailure(['submatch("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['submatch(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2']) enddef def Test_substitute() --- 3789,3796 ---- var actual = substitute('A123456789', pat, Rep, '') var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]" actual->assert_equal(expected) ! v9.CheckDefAndScriptFailure(['submatch("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['submatch(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2']) enddef def Test_substitute() *************** *** 3795,3814 **** assert_fails('"text"->substitute(".*", () => test_null_job(), "")', 'E908: using an invalid value as a String: job') assert_fails('"text"->substitute(".*", () => test_null_channel(), "")', 'E908: using an invalid value as a String: channel') endif ! CheckDefAndScriptFailure(['substitute(1, "b", "1", "d")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['substitute("a", 2, "1", "d")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['swapinfo({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) call swapinfo('x')->assert_equal({error: 'Cannot open file'}) call swapinfo('')->assert_equal({error: 'Cannot open file'}) enddef def Test_swapname() ! CheckDefAndScriptFailure(['swapname([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) assert_fails('swapname("NonExistingBuf")', 'E94:') enddef --- 3801,3820 ---- assert_fails('"text"->substitute(".*", () => test_null_job(), "")', 'E908: using an invalid value as a String: job') assert_fails('"text"->substitute(".*", () => test_null_channel(), "")', 'E908: using an invalid value as a String: channel') endif ! v9.CheckDefAndScriptFailure(['substitute(1, "b", "1", "d")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['substitute("a", 2, "1", "d")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['swapinfo({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) call swapinfo('x')->assert_equal({error: 'Cannot open file'}) call swapinfo('')->assert_equal({error: 'Cannot open file'}) enddef def Test_swapname() ! v9.CheckDefAndScriptFailure(['swapname([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) assert_fails('swapname("NonExistingBuf")', 'E94:') enddef *************** *** 3817,3862 **** setline(1, "text") synID(1, 1, true)->assert_equal(0) bwipe! ! CheckDefAndScriptFailure(['synID(0z10, 1, true)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['synID("a", true, false)'], ['E1013: Argument 2: type mismatch, expected number but got bool', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['synID(1, 1, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) ! CheckDefExecAndScriptFailure(['synID("", 10, true)'], 'E1209: Invalid value for a line number') enddef def Test_synIDattr() ! CheckDefAndScriptFailure(['synIDattr("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['synIDattr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['synIDtrans("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_synconcealed() ! CheckDefAndScriptFailure(['synconcealed(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['synconcealed(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) if has('conceal') ! CheckDefExecAndScriptFailure(['synconcealed("", 4)'], 'E1209: Invalid value for a line number') endif enddef def Test_synstack() ! CheckDefAndScriptFailure(['synstack(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['synstack(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefExecAndScriptFailure(['synstack("", 4)'], 'E1209: Invalid value for a line number') enddef def Test_system() ! CheckDefAndScriptFailure(['system(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['system("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 2']) assert_equal("123\n", system('echo 123')) enddef def Test_systemlist() ! CheckDefAndScriptFailure(['systemlist(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['systemlist("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 2']) if has('win32') call assert_equal(["123\r"], systemlist('echo 123')) else --- 3823,3868 ---- setline(1, "text") synID(1, 1, true)->assert_equal(0) bwipe! ! v9.CheckDefAndScriptFailure(['synID(0z10, 1, true)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['synID("a", true, false)'], ['E1013: Argument 2: type mismatch, expected number but got bool', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['synID(1, 1, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3']) ! v9.CheckDefExecAndScriptFailure(['synID("", 10, true)'], 'E1209: Invalid value for a line number') enddef def Test_synIDattr() ! v9.CheckDefAndScriptFailure(['synIDattr("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['synIDattr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['synIDtrans("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_synconcealed() ! v9.CheckDefAndScriptFailure(['synconcealed(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['synconcealed(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) if has('conceal') ! v9.CheckDefExecAndScriptFailure(['synconcealed("", 4)'], 'E1209: Invalid value for a line number') endif enddef def Test_synstack() ! v9.CheckDefAndScriptFailure(['synstack(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['synstack(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['synstack("", 4)'], 'E1209: Invalid value for a line number') enddef def Test_system() ! v9.CheckDefAndScriptFailure(['system(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['system("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 2']) assert_equal("123\n", system('echo 123')) enddef def Test_systemlist() ! v9.CheckDefAndScriptFailure(['systemlist(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['systemlist("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict', 'E1224: String, Number or List required for argument 2']) if has('win32') call assert_equal(["123\r"], systemlist('echo 123')) else *************** *** 3865,4001 **** enddef def Test_tabpagebuflist() ! CheckDefAndScriptFailure(['tabpagebuflist("t")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) assert_equal([bufnr('')], tabpagebuflist()) assert_equal([bufnr('')], tabpagebuflist(1)) enddef def Test_tabpagenr() ! CheckDefAndScriptFailure(['tabpagenr(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefExecAndScriptFailure(['tabpagenr("")'], 'E15: Invalid expression') assert_equal(1, tabpagenr('$')) assert_equal(1, tabpagenr()) enddef def Test_tabpagewinnr() ! CheckDefAndScriptFailure(['tabpagewinnr("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['tabpagewinnr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefExecAndScriptFailure(['tabpagewinnr(1, "")'], 'E15: Invalid expression') enddef def Test_taglist() ! CheckDefAndScriptFailure(['taglist([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['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() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_dumpload({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['term_dumpload({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['term_dumpload("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! CheckDefExecAndScriptFailure(['term_dumpload("")'], 'E485: Can''t read file') enddef def Test_term_dumpdiff() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_dumpdiff(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['term_dumpdiff("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['term_dumpdiff("a", "b", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) ! CheckDefExecAndScriptFailure(['term_dumpdiff("", "")'], 'E485: Can''t read file') enddef def Test_term_dumpwrite() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_dumpwrite(true, "b")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_dumpwrite(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['term_dumpwrite("a", "b", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_term_getaltscreen() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_getaltscreen(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) enddef def Test_term_getansicolors() CheckRunVimInTerminal CheckFeature termguicolors ! CheckDefAndScriptFailure(['term_getansicolors(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) enddef def Test_term_getattr() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_getattr("x", "a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['term_getattr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_term_getcursor() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_getcursor({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1220: String or Number required for argument 1']) enddef def Test_term_getjob() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_getjob(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) enddef def Test_term_getline() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_getline(1.1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_getline(1, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2']) enddef def Test_term_getscrolled() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_getscrolled(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) enddef def Test_term_getsize() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_getsize(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) enddef def Test_term_getstatus() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_getstatus(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) enddef def Test_term_gettitle() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_gettitle(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) enddef def Test_term_gettty() if !has('terminal') CheckFeature terminal else ! var buf = Run_shell_in_terminal({}) term_gettty(buf, true)->assert_notequal('') ! StopShellInTerminal(buf) endif ! CheckDefAndScriptFailure(['term_gettty([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_gettty(1, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) enddef def Test_term_scrape() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_scrape(1.1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_scrape(1, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2']) enddef def Test_term_sendkeys() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_sendkeys([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_sendkeys(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) enddef def Test_term_setansicolors() CheckRunVimInTerminal if has('termguicolors') || has('gui') ! CheckDefAndScriptFailure(['term_setansicolors([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_setansicolors(10, {})'], ['E1013: Argument 2: type mismatch, expected list but got dict', 'E1211: List required for argument 2']) else throw 'Skipped: Only works with termguicolors or gui feature' endif --- 3871,4007 ---- enddef def Test_tabpagebuflist() ! v9.CheckDefAndScriptFailure(['tabpagebuflist("t")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) assert_equal([bufnr('')], tabpagebuflist()) assert_equal([bufnr('')], tabpagebuflist(1)) enddef def Test_tabpagenr() ! v9.CheckDefAndScriptFailure(['tabpagenr(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['tabpagenr("")'], 'E15: Invalid expression') assert_equal(1, tabpagenr('$')) assert_equal(1, tabpagenr()) enddef def Test_tabpagewinnr() ! v9.CheckDefAndScriptFailure(['tabpagewinnr("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['tabpagewinnr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['tabpagewinnr(1, "")'], 'E15: Invalid expression') enddef def Test_taglist() ! v9.CheckDefAndScriptFailure(['taglist([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['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() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_dumpload({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_dumpload({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_dumpload("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['term_dumpload("")'], 'E485: Can''t read file') enddef def Test_term_dumpdiff() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_dumpdiff(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_dumpdiff("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['term_dumpdiff("a", "b", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) ! v9.CheckDefExecAndScriptFailure(['term_dumpdiff("", "")'], 'E485: Can''t read file') enddef def Test_term_dumpwrite() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_dumpwrite(true, "b")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_dumpwrite(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['term_dumpwrite("a", "b", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_term_getaltscreen() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_getaltscreen(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1']) enddef def Test_term_getansicolors() CheckRunVimInTerminal CheckFeature termguicolors ! v9.CheckDefAndScriptFailure(['term_getansicolors(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) enddef def Test_term_getattr() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_getattr("x", "a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_getattr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) enddef def Test_term_getcursor() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_getcursor({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1220: String or Number required for argument 1']) enddef def Test_term_getjob() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_getjob(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) enddef def Test_term_getline() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_getline(1.1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_getline(1, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2']) enddef def Test_term_getscrolled() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_getscrolled(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) enddef def Test_term_getsize() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_getsize(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) enddef def Test_term_getstatus() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_getstatus(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) enddef def Test_term_gettitle() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_gettitle(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) enddef def Test_term_gettty() if !has('terminal') CheckFeature terminal else ! var buf = g:Run_shell_in_terminal({}) term_gettty(buf, true)->assert_notequal('') ! g:StopShellInTerminal(buf) endif ! v9.CheckDefAndScriptFailure(['term_gettty([1])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_gettty(1, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2']) enddef def Test_term_scrape() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_scrape(1.1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_scrape(1, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2']) enddef def Test_term_sendkeys() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_sendkeys([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_sendkeys(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) enddef def Test_term_setansicolors() CheckRunVimInTerminal if has('termguicolors') || has('gui') ! v9.CheckDefAndScriptFailure(['term_setansicolors([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_setansicolors(10, {})'], ['E1013: Argument 2: type mismatch, expected list but got dict', 'E1211: List required for argument 2']) else throw 'Skipped: Only works with termguicolors or gui feature' endif *************** *** 4003,4029 **** def Test_term_setapi() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_setapi([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_setapi(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) enddef def Test_term_setkill() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_setkill([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_setkill(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) enddef def Test_term_setrestore() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_setrestore([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_setrestore(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) enddef def Test_term_setsize() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_setsize(1.1, 2, 3)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_setsize(1, "2", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['term_setsize(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_term_start() --- 4009,4035 ---- def Test_term_setapi() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_setapi([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_setapi(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) enddef def Test_term_setkill() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_setkill([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_setkill(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) enddef def Test_term_setrestore() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_setrestore([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_setrestore(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) enddef def Test_term_setsize() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_setsize(1.1, 2, 3)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_setsize(1, "2", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['term_setsize(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_term_start() *************** *** 4036,4129 **** winnr()->assert_equal(winnr) bwipe! endif ! CheckDefAndScriptFailure(['term_start({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! CheckDefAndScriptFailure(['term_start([], [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! CheckDefAndScriptFailure(['term_start("", "")'], ['E1013: Argument 2: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 2']) ! CheckDefExecAndScriptFailure(['term_start("")'], 'E474: Invalid argument') enddef def Test_term_wait() CheckRunVimInTerminal ! CheckDefAndScriptFailure(['term_wait(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! CheckDefAndScriptFailure(['term_wait(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_test_alloc_fail() ! CheckDefAndScriptFailure(['test_alloc_fail("a", 10, 20)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['test_alloc_fail(10, "b", 20)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['test_alloc_fail(10, 20, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_test_feedinput() ! CheckDefAndScriptFailure(['test_feedinput(test_void())'], ['E1013: Argument 1: type mismatch, expected string but got void', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['test_feedinput(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_test_getvalue() ! CheckDefAndScriptFailure(['test_getvalue(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) enddef def Test_test_gui_drop_files() CheckGui ! CheckDefAndScriptFailure(['test_gui_drop_files("a", 1, 1, 0)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['test_gui_drop_files(["x"], "", 1, 0)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['test_gui_drop_files(["x"], 1, "", 0)'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! CheckDefAndScriptFailure(['test_gui_drop_files(["x"], 1, 1, "")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) enddef def Test_test_gui_mouse_event() CheckGui ! CheckDefAndScriptFailure(['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']) ! CheckDefAndScriptFailure(['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']) ! CheckDefAndScriptFailure(['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']) ! CheckDefAndScriptFailure(['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']) ! CheckDefAndScriptFailure(['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']) enddef def Test_test_ignore_error() ! CheckDefAndScriptFailure(['test_ignore_error([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) test_ignore_error('RESET') enddef def Test_test_option_not_set() ! CheckDefAndScriptFailure(['test_option_not_set([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_test_override() ! CheckDefAndScriptFailure(['test_override(1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['test_override("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_test_scrollbar() CheckGui ! CheckDefAndScriptFailure(['test_scrollbar(1, 2, 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['test_scrollbar("a", "b", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['test_scrollbar("a", 2, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_test_setmouse() ! CheckDefAndScriptFailure(['test_setmouse("a", 10)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['test_setmouse(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_test_settime() ! CheckDefAndScriptFailure(['test_settime([1])'], ['E1013: Argument 1: type mismatch, expected number but got list', 'E1210: Number required for argument 1']) enddef def Test_test_srand_seed() ! CheckDefAndScriptFailure(['test_srand_seed([1])'], ['E1013: Argument 1: type mismatch, expected number but got list', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['test_srand_seed("10")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_timer_info() ! CheckDefAndScriptFailure(['timer_info("id")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) assert_equal([], timer_info(100)) assert_equal([], timer_info()) enddef def Test_timer_pause() ! CheckDefAndScriptFailure(['timer_pause("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['timer_pause(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2']) enddef def Test_timer_paused() --- 4042,4135 ---- winnr()->assert_equal(winnr) bwipe! endif ! v9.CheckDefAndScriptFailure(['term_start({})'], ['E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_start([], [])'], ['E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2']) ! v9.CheckDefAndScriptFailure(['term_start("", "")'], ['E1013: Argument 2: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 2']) ! v9.CheckDefExecAndScriptFailure(['term_start("")'], 'E474: Invalid argument') enddef def Test_term_wait() CheckRunVimInTerminal ! v9.CheckDefAndScriptFailure(['term_wait(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['term_wait(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_test_alloc_fail() ! v9.CheckDefAndScriptFailure(['test_alloc_fail("a", 10, 20)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['test_alloc_fail(10, "b", 20)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['test_alloc_fail(10, 20, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_test_feedinput() ! v9.CheckDefAndScriptFailure(['test_feedinput(test_void())'], ['E1013: Argument 1: type mismatch, expected string but got void', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['test_feedinput(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_test_getvalue() ! v9.CheckDefAndScriptFailure(['test_getvalue(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) enddef def Test_test_gui_drop_files() CheckGui ! v9.CheckDefAndScriptFailure(['test_gui_drop_files("a", 1, 1, 0)'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['test_gui_drop_files(["x"], "", 1, 0)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['test_gui_drop_files(["x"], 1, "", 0)'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) ! v9.CheckDefAndScriptFailure(['test_gui_drop_files(["x"], 1, 1, "")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4']) enddef def Test_test_gui_mouse_event() CheckGui ! v9.CheckDefAndScriptFailure(['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']) ! v9.CheckDefAndScriptFailure(['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']) ! v9.CheckDefAndScriptFailure(['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']) ! v9.CheckDefAndScriptFailure(['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']) ! v9.CheckDefAndScriptFailure(['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']) enddef def Test_test_ignore_error() ! v9.CheckDefAndScriptFailure(['test_ignore_error([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) test_ignore_error('RESET') enddef def Test_test_option_not_set() ! v9.CheckDefAndScriptFailure(['test_option_not_set([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) enddef def Test_test_override() ! v9.CheckDefAndScriptFailure(['test_override(1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['test_override("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_test_scrollbar() CheckGui ! v9.CheckDefAndScriptFailure(['test_scrollbar(1, 2, 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['test_scrollbar("a", "b", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['test_scrollbar("a", 2, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3']) enddef def Test_test_setmouse() ! v9.CheckDefAndScriptFailure(['test_setmouse("a", 10)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['test_setmouse(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_test_settime() ! v9.CheckDefAndScriptFailure(['test_settime([1])'], ['E1013: Argument 1: type mismatch, expected number but got list', 'E1210: Number required for argument 1']) enddef def Test_test_srand_seed() ! v9.CheckDefAndScriptFailure(['test_srand_seed([1])'], ['E1013: Argument 1: type mismatch, expected number but got list', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['test_srand_seed("10")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_timer_info() ! v9.CheckDefAndScriptFailure(['timer_info("id")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) assert_equal([], timer_info(100)) assert_equal([], timer_info()) enddef def Test_timer_pause() ! v9.CheckDefAndScriptFailure(['timer_pause("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['timer_pause(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2']) enddef def Test_timer_paused() *************** *** 4135,4165 **** enddef def Test_timer_start() ! CheckDefAndScriptFailure(['timer_start("a", "1")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['timer_start(1, "1", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) ! CheckDefExecAndScriptFailure(['timer_start(100, 0)'], 'E921:') ! CheckDefExecAndScriptFailure(['timer_start(100, "")'], 'E921:') enddef def Test_timer_stop() ! CheckDefAndScriptFailure(['timer_stop("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) assert_equal(0, timer_stop(100)) enddef def Test_tolower() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['tr(1, "a", "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['tr("a", 1, "b")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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:') --- 4141,4171 ---- enddef def Test_timer_start() ! v9.CheckDefAndScriptFailure(['timer_start("a", "1")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['timer_start(1, "1", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) ! v9.CheckDefExecAndScriptFailure(['timer_start(100, 0)'], 'E921:') ! v9.CheckDefExecAndScriptFailure(['timer_start(100, "")'], 'E921:') enddef def Test_timer_stop() ! v9.CheckDefAndScriptFailure(['timer_stop("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) assert_equal(0, timer_stop(100)) enddef def Test_tolower() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['tr(1, "a", "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['tr("a", 1, "b")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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:') *************** *** 4167,4175 **** enddef def Test_trim() ! CheckDefAndScriptFailure(['trim(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefAndScriptFailure(['trim("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! CheckDefAndScriptFailure(['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 --- 4173,4181 ---- enddef def Test_trim() ! v9.CheckDefAndScriptFailure(['trim(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefAndScriptFailure(['trim("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2']) ! v9.CheckDefAndScriptFailure(['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 *************** *** 4190,4216 **** enddef def Test_undofile() ! CheckDefAndScriptFailure(['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() ! CheckDefAndScriptFailure(['uniq("a")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! CheckDefAndScriptFailure(['uniq([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) ! CheckDefFailure(['var l: list = uniq(["a", "b"])'], 'E1012: Type mismatch; expected list but got list') enddef def Test_values() ! CheckDefAndScriptFailure(['values([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) assert_equal([], {}->values()) assert_equal(['sun'], {star: 'sun'}->values()) enddef def Test_virtcol() ! CheckDefAndScriptFailure(['virtcol(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1']) ! CheckDefExecAndScriptFailure(['virtcol("")'], 'E1209: Invalid value for a line number') new setline(1, ['abcdefgh']) cursor(1, 4) --- 4196,4222 ---- enddef def Test_undofile() ! v9.CheckDefAndScriptFailure(['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() ! v9.CheckDefAndScriptFailure(['uniq("a")'], ['E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1']) ! v9.CheckDefAndScriptFailure(['uniq([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) ! v9.CheckDefFailure(['var l: list = uniq(["a", "b"])'], 'E1012: Type mismatch; expected list but got list') enddef def Test_values() ! v9.CheckDefAndScriptFailure(['values([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) assert_equal([], {}->values()) assert_equal(['sun'], {star: 'sun'}->values()) enddef def Test_virtcol() ! v9.CheckDefAndScriptFailure(['virtcol(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['virtcol("")'], 'E1209: Invalid value for a line number') new setline(1, ['abcdefgh']) cursor(1, 4) *************** *** 4222,4229 **** enddef def Test_visualmode() ! CheckDefAndScriptFailure(['visualmode("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) ! CheckDefAndScriptFailure(['visualmode(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) enddef def Test_win_execute() --- 4228,4235 ---- enddef def Test_visualmode() ! v9.CheckDefAndScriptFailure(['visualmode("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) ! v9.CheckDefAndScriptFailure(['visualmode(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1']) enddef def Test_win_execute() *************** *** 4231,4297 **** assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid())) assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent')) assert_equal('', win_execute(342343, 'echo winnr()')) ! CheckDefAndScriptFailure(['win_execute("a", "b", "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['win_execute(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2']) ! CheckDefAndScriptFailure(['win_execute(1, "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_win_findbuf() ! CheckDefAndScriptFailure(['win_findbuf("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) assert_equal([], win_findbuf(1000)) assert_equal([win_getid()], win_findbuf(bufnr(''))) enddef def Test_win_getid() ! CheckDefAndScriptFailure(['win_getid(".")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['win_getid(1, ".")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) assert_equal(win_getid(), win_getid(1, 1)) enddef def Test_win_gettype() ! CheckDefAndScriptFailure(['win_gettype("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_gotoid() ! CheckDefAndScriptFailure(['win_gotoid("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_id2tabwin() ! CheckDefAndScriptFailure(['win_id2tabwin("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_id2win() ! CheckDefAndScriptFailure(['win_id2win("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_screenpos() ! CheckDefAndScriptFailure(['win_screenpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_splitmove() split win_splitmove(1, 2, {vertical: true, rightbelow: true}) close ! CheckDefAndScriptFailure(['win_splitmove("a", 2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['win_splitmove(1, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! CheckDefAndScriptFailure(['win_splitmove(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_winbufnr() ! CheckDefAndScriptFailure(['winbufnr("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_winheight() ! CheckDefAndScriptFailure(['winheight("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_winlayout() ! CheckDefAndScriptFailure(['winlayout("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_winnr() ! CheckDefAndScriptFailure(['winnr([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! CheckDefExecAndScriptFailure(['winnr("")'], 'E15: Invalid expression') assert_equal(1, winnr()) assert_equal(1, winnr('$')) enddef --- 4237,4303 ---- assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid())) assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent')) assert_equal('', win_execute(342343, 'echo winnr()')) ! v9.CheckDefAndScriptFailure(['win_execute("a", "b", "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['win_execute(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2']) ! v9.CheckDefAndScriptFailure(['win_execute(1, "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']) enddef def Test_win_findbuf() ! v9.CheckDefAndScriptFailure(['win_findbuf("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) assert_equal([], win_findbuf(1000)) assert_equal([win_getid()], win_findbuf(bufnr(''))) enddef def Test_win_getid() ! v9.CheckDefAndScriptFailure(['win_getid(".")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['win_getid(1, ".")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) assert_equal(win_getid(), win_getid(1, 1)) enddef def Test_win_gettype() ! v9.CheckDefAndScriptFailure(['win_gettype("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_gotoid() ! v9.CheckDefAndScriptFailure(['win_gotoid("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_id2tabwin() ! v9.CheckDefAndScriptFailure(['win_id2tabwin("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_id2win() ! v9.CheckDefAndScriptFailure(['win_id2win("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_screenpos() ! v9.CheckDefAndScriptFailure(['win_screenpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_win_splitmove() split win_splitmove(1, 2, {vertical: true, rightbelow: true}) close ! v9.CheckDefAndScriptFailure(['win_splitmove("a", 2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['win_splitmove(1, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) ! v9.CheckDefAndScriptFailure(['win_splitmove(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) enddef def Test_winbufnr() ! v9.CheckDefAndScriptFailure(['winbufnr("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_winheight() ! v9.CheckDefAndScriptFailure(['winheight("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_winlayout() ! v9.CheckDefAndScriptFailure(['winlayout("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_winnr() ! v9.CheckDefAndScriptFailure(['winnr([])'], ['E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1']) ! v9.CheckDefExecAndScriptFailure(['winnr("")'], 'E15: Invalid expression') assert_equal(1, winnr()) assert_equal(1, winnr('$')) enddef *************** *** 4306,4312 **** enddef def Test_winrestview() ! CheckDefAndScriptFailure(['winrestview([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) :%d _ setline(1, 'Hello World') winrestview({lnum: 1, col: 6}) --- 4312,4318 ---- enddef def Test_winrestview() ! v9.CheckDefAndScriptFailure(['winrestview([])'], ['E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1']) :%d _ setline(1, 'Hello World') winrestview({lnum: 1, col: 6}) *************** *** 4319,4338 **** var lines =<< trim END var view: list = winsaveview() END ! CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list but got dict', 1) enddef def Test_winwidth() ! CheckDefAndScriptFailure(['winwidth("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_xor() ! CheckDefAndScriptFailure(['xor("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! CheckDefAndScriptFailure(['xor(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_writefile() ! CheckDefExecAndScriptFailure(['writefile(["a"], "")'], 'E482: Can''t create file ') enddef " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker --- 4325,4344 ---- var lines =<< trim END var view: list = winsaveview() END ! v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list but got dict', 1) enddef def Test_winwidth() ! v9.CheckDefAndScriptFailure(['winwidth("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) enddef def Test_xor() ! v9.CheckDefAndScriptFailure(['xor("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) ! v9.CheckDefAndScriptFailure(['xor(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2']) enddef def Test_writefile() ! v9.CheckDefExecAndScriptFailure(['writefile(["a"], "")'], 'E482: Can''t create file ') enddef " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker *** ../vim-8.2.4256/src/testdir/test_vim9_cmd.vim 2022-01-26 21:32:55.691520478 +0000 --- src/testdir/test_vim9_cmd.vim 2022-01-29 18:18:46.808754409 +0000 *************** *** 1,7 **** " Test commands that are not compiled in a :def function source check.vim ! source vim9.vim source term_util.vim source view_util.vim --- 1,7 ---- " Test commands that are not compiled in a :def function source check.vim ! import './vim9.vim' as v9 source term_util.vim source view_util.vim *************** *** 12,18 **** vim9c assert_equal(123, x) vim9cm assert_equal('yes', y) END ! CheckScriptSuccess(lines) assert_fails('vim9cmd', 'E1164:') assert_fails('legacy', 'E1234:') --- 12,18 ---- vim9c assert_equal(123, x) vim9cm assert_equal('yes', y) END ! v9.CheckScriptSuccess(lines) assert_fails('vim9cmd', 'E1164:') assert_fails('legacy', 'E1234:') *************** *** 22,28 **** let str = 'con' vim9cmd str .= 'cat' END ! CheckScriptFailure(lines, 'E492:') lines =<< trim END vim9script --- 22,28 ---- let str = 'con' vim9cmd str .= 'cat' END ! v9.CheckScriptFailure(lines, 'E492:') lines =<< trim END vim9script *************** *** 30,36 **** legacy let str = 'con' legacy let str .= 'cat' END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 30,36 ---- legacy let str = 'con' legacy let str .= 'cat' END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 39,45 **** enddef nmap ,; :vim9cmd Foo() END ! CheckScriptSuccess(lines) feedkeys(',;', 'xt') assert_equal("bar", g:found_bar) --- 39,45 ---- enddef nmap ,; :vim9cmd Foo() END ! v9.CheckScriptSuccess(lines) feedkeys(',;', 'xt') assert_equal("bar", g:found_bar) *************** *** 50,72 **** vim9script legacy echo 1'000 END ! CheckScriptFailure(lines, 'E115:') if has('float') lines =<< trim END vim9script echo .10 END ! CheckScriptSuccess(lines) lines =<< trim END vim9cmd echo .10 END ! CheckScriptSuccess(lines) lines =<< trim END vim9script legacy echo .10 END ! CheckScriptFailure(lines, 'E15:') endif echo v:version --- 50,72 ---- vim9script legacy echo 1'000 END ! v9.CheckScriptFailure(lines, 'E115:') if has('float') lines =<< trim END vim9script echo .10 END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9cmd echo .10 END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script legacy echo .10 END ! v9.CheckScriptFailure(lines, 'E15:') endif echo v:version *************** *** 75,86 **** vim9script echo version END ! CheckScriptFailure(lines, 'E121:') lines =<< trim END vim9script legacy echo version END ! CheckScriptSuccess(lines) enddef def Test_edit_wildcards() --- 75,86 ---- vim9script echo version END ! v9.CheckScriptFailure(lines, 'E121:') lines =<< trim END vim9script legacy echo version END ! v9.CheckScriptSuccess(lines) enddef def Test_edit_wildcards() *************** *** 99,106 **** edit X`=filename`xx`=filenr`yy assert_equal('XXtestxx77yy', bufname()) ! CheckDefFailure(['edit `=xxx`'], 'E1001:') ! CheckDefFailure(['edit `="foo"'], 'E1083:') var files = ['file 1', 'file%2', 'file# 3'] args `=files` --- 99,106 ---- edit X`=filename`xx`=filenr`yy assert_equal('XXtestxx77yy', bufname()) ! v9.CheckDefFailure(['edit `=xxx`'], 'E1001:') ! v9.CheckDefFailure(['edit `="foo"'], 'E1083:') var files = ['file 1', 'file%2', 'file# 3'] args `=files` *************** *** 179,185 **** bwipe! altfoo bwipe! bar END ! CheckDefAndScriptSuccess(lines) enddef def Test_global_backtick_expansion() --- 179,185 ---- bwipe! altfoo bwipe! bar END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_global_backtick_expansion() *************** *** 221,227 **** enddef call Test() END ! CheckScriptFailure(lines, 'E15: Invalid expression: "`=g:val`"') enddef def Test_hardcopy_wildcards() --- 221,227 ---- enddef call Test() END ! v9.CheckScriptFailure(lines, 'E15: Invalid expression: "`=g:val`"') enddef def Test_hardcopy_wildcards() *************** *** 257,263 **** redir END assert_equal("\nonetwo", @a) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 257,263 ---- redir END assert_equal("\nonetwo", @a) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 268,274 **** redir END assert_equal("\n66", @a) END ! CheckScriptSuccess(lines) enddef def Test_condition_types() --- 268,274 ---- redir END assert_equal("\n66", @a) END ! v9.CheckScriptSuccess(lines) enddef def Test_condition_types() *************** *** 276,296 **** if 'text' endif END ! CheckDefAndScriptFailure(lines, 'E1135:', 1) lines =<< trim END if [1] endif END ! CheckDefFailure(lines, 'E1012:', 1) ! CheckScriptFailure(['vim9script'] + lines, 'E745:', 2) lines =<< trim END g:cond = 'text' if g:cond endif END ! CheckDefExecAndScriptFailure(lines, 'E1135:', 2) lines =<< trim END g:cond = 0 --- 276,296 ---- if 'text' endif END ! v9.CheckDefAndScriptFailure(lines, 'E1135:', 1) lines =<< trim END if [1] endif END ! v9.CheckDefFailure(lines, 'E1012:', 1) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 2) lines =<< trim END g:cond = 'text' if g:cond endif END ! v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 2) lines =<< trim END g:cond = 0 *************** *** 298,304 **** elseif 'text' endif END ! CheckDefAndScriptFailure(lines, 'E1135:', 3) lines =<< trim END g:cond = 0 --- 298,304 ---- elseif 'text' endif END ! v9.CheckDefAndScriptFailure(lines, 'E1135:', 3) lines =<< trim END g:cond = 0 *************** *** 306,312 **** elseif 'text' garbage endif END ! CheckDefAndScriptFailure(lines, 'E488:', 3) lines =<< trim END g:cond = 0 --- 306,312 ---- elseif 'text' garbage endif END ! v9.CheckDefAndScriptFailure(lines, 'E488:', 3) lines =<< trim END g:cond = 0 *************** *** 314,321 **** elseif [1] endif END ! CheckDefFailure(lines, 'E1012:', 3) ! CheckScriptFailure(['vim9script'] + lines, 'E745:', 4) lines =<< trim END g:cond = 'text' --- 314,321 ---- elseif [1] endif END ! v9.CheckDefFailure(lines, 'E1012:', 3) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 4) lines =<< trim END g:cond = 'text' *************** *** 323,350 **** elseif g:cond endif END ! CheckDefExecAndScriptFailure(lines, 'E1135:', 3) lines =<< trim END while 'text' endwhile END ! CheckDefFailure(lines, 'E1012:', 1) ! CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2) lines =<< trim END while [1] endwhile END ! CheckDefFailure(lines, 'E1012:', 1) ! CheckScriptFailure(['vim9script'] + lines, 'E745:', 2) lines =<< trim END g:cond = 'text' while g:cond endwhile END ! CheckDefExecAndScriptFailure(lines, 'E1135:', 2) enddef def Test_if_linebreak() --- 323,350 ---- elseif g:cond endif END ! v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 3) lines =<< trim END while 'text' endwhile END ! v9.CheckDefFailure(lines, 'E1012:', 1) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2) lines =<< trim END while [1] endwhile END ! v9.CheckDefFailure(lines, 'E1012:', 1) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 2) lines =<< trim END g:cond = 'text' while g:cond endwhile END ! v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 2) enddef def Test_if_linebreak() *************** *** 357,363 **** endif assert_equal(42, g:res) END ! CheckScriptSuccess(lines) unlet g:res lines =<< trim END --- 357,363 ---- endif assert_equal(42, g:res) END ! v9.CheckScriptSuccess(lines) unlet g:res lines =<< trim END *************** *** 372,378 **** endif assert_equal(12, g:res) END ! CheckScriptSuccess(lines) unlet g:res enddef --- 372,378 ---- endif assert_equal(12, g:res) END ! v9.CheckScriptSuccess(lines) unlet g:res enddef *************** *** 387,393 **** endwhile assert_equal(16, nr) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 387,393 ---- endwhile assert_equal(16, nr) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 403,409 **** endwhile assert_equal(16, nr) END ! CheckScriptSuccess(lines) enddef def Test_for_linebreak() --- 403,409 ---- endwhile assert_equal(16, nr) END ! v9.CheckScriptSuccess(lines) enddef def Test_for_linebreak() *************** *** 417,423 **** endfor assert_equal(10, nr) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 417,423 ---- endfor assert_equal(10, nr) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 433,442 **** endfor assert_equal(10, nr) END ! CheckScriptSuccess(lines) enddef ! def MethodAfterLinebreak(arg: string) arg ->setline(1) enddef --- 433,442 ---- endfor assert_equal(10, nr) END ! v9.CheckScriptSuccess(lines) enddef ! def s:MethodAfterLinebreak(arg: string) arg ->setline(1) enddef *************** *** 455,461 **** 3]->RetArg() assert_equal([1, 2, 3], res) END ! CheckScriptSuccess(lines) lines =<< trim END new --- 455,461 ---- 3]->RetArg() assert_equal([1, 2, 3], res) END ! v9.CheckScriptSuccess(lines) lines =<< trim END new *************** *** 466,472 **** assert_equal(['1', '2'], getline(1, 2)) bwipe! END ! CheckDefAndScriptSuccess(lines) lines =<< trim END new --- 466,472 ---- assert_equal(['1', '2'], getline(1, 2)) bwipe! END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END new *************** *** 484,490 **** assert_equal('the text', getline(1)) bwipe! END ! CheckDefAndScriptSuccess(lines) lines =<< trim END new --- 484,490 ---- assert_equal('the text', getline(1)) bwipe! END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END new *************** *** 495,501 **** bwipe! END g:shortlist = [1, 2] ! CheckDefAndScriptSuccess(lines) unlet g:shortlist new --- 495,501 ---- bwipe! END g:shortlist = [1, 2] ! v9.CheckDefAndScriptSuccess(lines) unlet g:shortlist new *************** *** 516,522 **** Foo->Bar() ->setline(1) END ! CheckScriptSuccess(lines) assert_equal('# some text', getline(1)) bwipe! enddef --- 516,522 ---- Foo->Bar() ->setline(1) END ! v9.CheckScriptSuccess(lines) assert_equal('# some text', getline(1)) bwipe! enddef *************** *** 532,538 **** assert_equal(['text', 'text', 'text', 'text'], getline(1, 4)) bwipe! END ! CheckDefAndScriptSuccess(lines) enddef def Test_method_and_user_command() --- 532,538 ---- assert_equal(['text', 'text', 'text', 'text'], getline(1, 4)) bwipe! END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_method_and_user_command() *************** *** 559,565 **** enddef InDefFunc() END ! CheckScriptSuccess(lines) enddef def Test_option_use_linebreak() --- 559,565 ---- enddef InDefFunc() END ! v9.CheckScriptSuccess(lines) enddef def Test_option_use_linebreak() *************** *** 575,581 **** assert_equal(['(:)', '[:]', '{:}'], getline(1, '$')) bwipe! END ! CheckDefAndScriptSuccess(lines) enddef def Test_use_register() --- 575,581 ---- assert_equal(['(:)', '[:]', '{:}'], getline(1, '$')) bwipe! END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_use_register() *************** *** 591,636 **** assert_equal(['one', 'two', 'three'], getline(1, '$')) bwipe! END ! CheckDefAndScriptSuccess(lines) lines =<< trim END @a = 'echo "text"' @a END ! CheckDefAndScriptFailure(lines, 'E1207:', 2) lines =<< trim END @/ = 'pattern' @/ END ! CheckDefAndScriptFailure(lines, 'E1207:', 2) lines =<< trim END &opfunc = 'nothing' &opfunc END ! CheckDefAndScriptFailure(lines, 'E1207:', 2) &opfunc = '' lines =<< trim END &l:showbreak = 'nothing' &l:showbreak END ! CheckDefAndScriptFailure(lines, 'E1207:', 2) &l:showbreak = '' lines =<< trim END &g:showbreak = 'nothing' &g:showbreak END ! CheckDefAndScriptFailure(lines, 'E1207:', 2) &g:showbreak = '' lines =<< trim END $SomeEnv = 'value' $SomeEnv END ! CheckDefAndScriptFailure(lines, 'E1207:', 2) $SomeEnv = '' enddef --- 591,636 ---- assert_equal(['one', 'two', 'three'], getline(1, '$')) bwipe! END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END @a = 'echo "text"' @a END ! v9.CheckDefAndScriptFailure(lines, 'E1207:', 2) lines =<< trim END @/ = 'pattern' @/ END ! v9.CheckDefAndScriptFailure(lines, 'E1207:', 2) lines =<< trim END &opfunc = 'nothing' &opfunc END ! v9.CheckDefAndScriptFailure(lines, 'E1207:', 2) &opfunc = '' lines =<< trim END &l:showbreak = 'nothing' &l:showbreak END ! v9.CheckDefAndScriptFailure(lines, 'E1207:', 2) &l:showbreak = '' lines =<< trim END &g:showbreak = 'nothing' &g:showbreak END ! v9.CheckDefAndScriptFailure(lines, 'E1207:', 2) &g:showbreak = '' lines =<< trim END $SomeEnv = 'value' $SomeEnv END ! v9.CheckDefAndScriptFailure(lines, 'E1207:', 2) $SomeEnv = '' enddef *************** *** 647,653 **** assert_equal(['one', 'two', 'three'], getline(1, '$')) bwipe! END ! CheckDefAndScriptSuccess(lines) enddef def Test_skipped_expr_linebreak() --- 647,653 ---- assert_equal(['one', 'two', 'three'], getline(1, '$')) bwipe! END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_skipped_expr_linebreak() *************** *** 671,677 **** test.data->sort() assert_equal({data: [1, 2, 3]}, test) END ! CheckScriptSuccess(lines) enddef def Test_bar_after_command() --- 671,677 ---- test.data->sort() assert_equal({data: [1, 2, 3]}, test) END ! v9.CheckScriptSuccess(lines) enddef def Test_bar_after_command() *************** *** 680,693 **** redraw | echo x enddef RedrawAndEcho() ! assert_match('did redraw', Screenline(&lines)) def CallAndEcho() var x = 'did redraw' reg_executing() | echo x enddef CallAndEcho() ! assert_match('did redraw', Screenline(&lines)) if has('unix') # bar in filter write command does not start new command --- 680,693 ---- redraw | echo x enddef RedrawAndEcho() ! assert_match('did redraw', g:Screenline(&lines)) def CallAndEcho() var x = 'did redraw' reg_executing() | echo x enddef CallAndEcho() ! assert_match('did redraw', g:Screenline(&lines)) if has('unix') # bar in filter write command does not start new command *************** *** 729,743 **** assert_equal(execute('filter /piyo/ registers abc'), expected) END ! CheckDefAndScriptSuccess(lines) # also do this compiled lines =<< trim END @a = 'very specific z3d37dh234 string' filter z3d37dh234 registers ! assert_match('very specific z3d37dh234 string', Screenline(&lines)) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END edit foobar --- 729,743 ---- assert_equal(execute('filter /piyo/ registers abc'), expected) END ! v9.CheckDefAndScriptSuccess(lines) # also do this compiled lines =<< trim END @a = 'very specific z3d37dh234 string' filter z3d37dh234 registers ! assert_match('very specific z3d37dh234 string', g:Screenline(&lines)) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END edit foobar *************** *** 747,753 **** assert_match('"foobar"', g:filter_out) unlet g:filter_out END ! CheckDefAndScriptSuccess(lines) enddef def Test_win_command_modifiers() --- 747,753 ---- assert_match('"foobar"', g:filter_out) unlet g:filter_out END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_win_command_modifiers() *************** *** 930,936 **** unlet g:readExtra unlet g:readMore END ! CheckDefAndScriptSuccess(lines) enddef def Test_command_modifier_other() --- 930,936 ---- unlet g:readExtra unlet g:readMore END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_command_modifier_other() *************** *** 972,981 **** unlet g:verbose_now enddef ! def EchoHere() echomsg 'here' enddef ! def EchoThere() unsilent echomsg 'there' enddef --- 972,981 ---- unlet g:verbose_now enddef ! def s:EchoHere() echomsg 'here' enddef ! def s:EchoThere() unsilent echomsg 'there' enddef *************** *** 1009,1029 **** assert_equal(11, &history) set history& END ! CheckScriptSuccess(lines) enddef def Test_range_after_command_modifier() ! CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2) new setline(1, 'xxx') ! CheckScriptSuccess(['vim9script', 'silent keepjump :1d _']) assert_equal('', getline(1)) bwipe! var lines =<< trim END legacy /pat/ END ! CheckDefExecAndScriptFailure(lines, 'E486: Pattern not found: pat') enddef def Test_silent_pattern() --- 1009,1029 ---- assert_equal(11, &history) set history& END ! v9.CheckScriptSuccess(lines) enddef def Test_range_after_command_modifier() ! v9.CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2) new setline(1, 'xxx') ! v9.CheckScriptSuccess(['vim9script', 'silent keepjump :1d _']) assert_equal('', getline(1)) bwipe! var lines =<< trim END legacy /pat/ END ! v9.CheckDefExecAndScriptFailure(lines, 'E486: Pattern not found: pat') enddef def Test_silent_pattern() *************** *** 1038,1087 **** if g:maybe silent endif END ! CheckDefAndScriptFailure(lines, 'E1176:', 2) lines =<< trim END for i in [0] silent endfor END ! CheckDefFailure(lines, 'E1176:', 2) ! CheckScriptSuccess(['vim9script'] + lines) lines =<< trim END while g:maybe silent endwhile END ! CheckDefFailure(lines, 'E1176:', 2) g:maybe = false ! CheckScriptSuccess(['vim9script'] + lines) lines =<< trim END silent try finally endtry END ! CheckDefAndScriptFailure(lines, 'E1176:', 1) lines =<< trim END try silent catch endtry END ! CheckDefAndScriptFailure(lines, 'E1176:', 2) lines =<< trim END try silent finally endtry END ! CheckDefAndScriptFailure(lines, 'E1176:', 2) lines =<< trim END try finally silent endtry END ! CheckDefAndScriptFailure(lines, 'E1176:', 3) enddef def Test_eval_command() --- 1038,1087 ---- if g:maybe silent endif END ! v9.CheckDefAndScriptFailure(lines, 'E1176:', 2) lines =<< trim END for i in [0] silent endfor END ! v9.CheckDefFailure(lines, 'E1176:', 2) ! v9.CheckScriptSuccess(['vim9script'] + lines) lines =<< trim END while g:maybe silent endwhile END ! v9.CheckDefFailure(lines, 'E1176:', 2) g:maybe = false ! v9.CheckScriptSuccess(['vim9script'] + lines) lines =<< trim END silent try finally endtry END ! v9.CheckDefAndScriptFailure(lines, 'E1176:', 1) lines =<< trim END try silent catch endtry END ! v9.CheckDefAndScriptFailure(lines, 'E1176:', 2) lines =<< trim END try silent finally endtry END ! v9.CheckDefAndScriptFailure(lines, 'E1176:', 2) lines =<< trim END try finally silent endtry END ! v9.CheckDefAndScriptFailure(lines, 'E1176:', 3) enddef def Test_eval_command() *************** *** 1109,1115 **** assert_equal('yes', g:caught) unlet g:caught END ! CheckScriptSuccess(lines) enddef def Test_map_command() --- 1109,1115 ---- assert_equal('yes', g:caught) unlet g:caught END ! v9.CheckScriptSuccess(lines) enddef def Test_map_command() *************** *** 1117,1124 **** nnoremap :echo 'hit F3 #' assert_equal(":echo 'hit F3 #'", maparg("", "n")) END ! CheckDefSuccess(lines) ! CheckScriptSuccess(['vim9script'] + lines) enddef def Test_normal_command() --- 1117,1124 ---- nnoremap :echo 'hit F3 #' assert_equal(":echo 'hit F3 #'", maparg("", "n")) END ! v9.CheckDefSuccess(lines) ! v9.CheckScriptSuccess(['vim9script'] + lines) enddef def Test_normal_command() *************** *** 1173,1179 **** bwipe! ! CheckDefFailure(['put =xxx'], 'E1001:') enddef def Test_put_with_linebreak() --- 1173,1179 ---- bwipe! ! v9.CheckDefFailure(['put =xxx'], 'E1001:') enddef def Test_put_with_linebreak() *************** *** 1183,1189 **** pu =split('abc', '\zs') ->join() END ! CheckScriptSuccess(lines) getline(2)->assert_equal('a b c') bwipe! enddef --- 1183,1189 ---- pu =split('abc', '\zs') ->join() END ! v9.CheckScriptSuccess(lines) getline(2)->assert_equal('a b c') bwipe! enddef *************** *** 1215,1221 **** TestFArgs one two three assert_equal(['one', 'two', 'three'], g:args) END ! CheckScriptSuccess(lines) enddef def Test_user_command_comment() --- 1215,1221 ---- TestFArgs one two three assert_equal(['one', 'two', 'three'], g:args) END ! v9.CheckScriptSuccess(lines) enddef def Test_user_command_comment() *************** *** 1225,1237 **** vim9script Comd # comment END ! CheckScriptSuccess(lines) lines =<< trim END vim9script Comd# comment END ! CheckScriptFailure(lines, 'E1144:') delcommand Comd lines =<< trim END --- 1225,1237 ---- vim9script Comd # comment END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script Comd# comment END ! v9.CheckScriptFailure(lines, 'E1144:') delcommand Comd lines =<< trim END *************** *** 1239,1245 **** command Foo echo 'Foo' Foo3Bar END ! CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar') delcommand Foo enddef --- 1239,1245 ---- command Foo echo 'Foo' Foo3Bar END ! v9.CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar') delcommand Foo enddef *************** *** 1255,1261 **** set cpo-=* assert_fails("exe '*s'", 'E1050:') END ! CheckScriptSuccess(lines) enddef def Test_cmd_argument_without_colon() --- 1255,1261 ---- set cpo-=* assert_fails("exe '*s'", 'E1050:') END ! v9.CheckScriptSuccess(lines) enddef def Test_cmd_argument_without_colon() *************** *** 1276,1282 **** var lines =<< trim END Cmd END ! CheckDefAndScriptFailure(lines, 'E464:', 1) delcommand Cmd1 delcommand Cmd2 enddef --- 1276,1282 ---- var lines =<< trim END Cmd END ! v9.CheckDefAndScriptFailure(lines, 'E464:', 1) delcommand Cmd1 delcommand Cmd2 enddef *************** *** 1285,1296 **** var lines =<< trim END d.key = 'asdf' END ! CheckDefFailure(lines, 'E1146:', 1) lines =<< trim END d['key'] = 'asdf' END ! CheckDefFailure(lines, 'E1146:', 1) enddef def Test_magic_not_used() --- 1285,1296 ---- var lines =<< trim END d.key = 'asdf' END ! v9.CheckDefFailure(lines, 'E1146:', 1) lines =<< trim END d['key'] = 'asdf' END ! v9.CheckDefFailure(lines, 'E1146:', 1) enddef def Test_magic_not_used() *************** *** 1378,1384 **** var lines =<< trim END windo if 1 END ! CheckDefExecFailure(lines, 'E171:', 1) enddef let s:theList = [1, 2, 3] --- 1378,1384 ---- var lines =<< trim END windo if 1 END ! v9.CheckDefExecFailure(lines, 'E171:', 1) enddef let s:theList = [1, 2, 3] *************** *** 1464,1489 **** enddef SetList() END ! CheckScriptFailure(lines, 'E1119', 4) lines =<< trim END var theList = [1, 2, 3] lockvar theList END ! CheckDefFailure(lines, 'E1178', 2) lines =<< trim END var theList = [1, 2, 3] unlockvar theList END ! CheckDefFailure(lines, 'E1178', 2) lines =<< trim END vim9script var name = 'john' lockvar nameX END ! CheckScriptFailure(lines, 'E1246', 3) lines =<< trim END vim9script --- 1464,1489 ---- enddef SetList() END ! v9.CheckScriptFailure(lines, 'E1119', 4) lines =<< trim END var theList = [1, 2, 3] lockvar theList END ! v9.CheckDefFailure(lines, 'E1178', 2) lines =<< trim END var theList = [1, 2, 3] unlockvar theList END ! v9.CheckDefFailure(lines, 'E1178', 2) lines =<< trim END vim9script var name = 'john' lockvar nameX END ! v9.CheckScriptFailure(lines, 'E1246', 3) lines =<< trim END vim9script *************** *** 1493,1499 **** enddef LockIt() END ! CheckScriptFailure(lines, 'E1246', 1) enddef def Test_substitute_expr() --- 1493,1499 ---- enddef LockIt() END ! v9.CheckScriptFailure(lines, 'E1246', 1) enddef def Test_substitute_expr() *************** *** 1520,1527 **** bwipe! ! CheckDefFailure(['s/from/\="x")/'], 'E488:') ! CheckDefFailure(['s/from/\="x"/9'], 'E488:') # When calling a function the right instruction list needs to be restored. g:cond = true --- 1520,1527 ---- bwipe! ! v9.CheckDefFailure(['s/from/\="x")/'], 'E488:') ! v9.CheckDefFailure(['s/from/\="x"/9'], 'E488:') # When calling a function the right instruction list needs to be restored. g:cond = true *************** *** 1545,1551 **** assert_equal('rep', getline(1)) bwipe! END ! CheckScriptSuccess(lines) unlet g:cond # List results in multiple lines --- 1545,1551 ---- assert_equal('rep', getline(1)) bwipe! END ! v9.CheckScriptSuccess(lines) unlet g:cond # List results in multiple lines *************** *** 1594,1607 **** var lines =<< trim END redir => notexist END ! CheckDefFailure(lines, 'E1089:') lines =<< trim END var ls = 'asdf' redir => ls[1] redir END END ! CheckDefFailure(lines, 'E1141:') lines =<< trim END var text: string --- 1594,1607 ---- var lines =<< trim END redir => notexist END ! v9.CheckDefFailure(lines, 'E1089:') lines =<< trim END var ls = 'asdf' redir => ls[1] redir END END ! v9.CheckDefFailure(lines, 'E1141:') lines =<< trim END var text: string *************** *** 1610,1616 **** redir > Xfile redir END END ! CheckDefFailure(lines, 'E1185:') lines =<< trim END var text: number --- 1610,1616 ---- redir > Xfile redir END END ! v9.CheckDefFailure(lines, 'E1185:') lines =<< trim END var text: number *************** *** 1618,1624 **** echo 'hello' redir END END ! CheckDefFailure(lines, 'E1012:') enddef def Test_echo_void() --- 1618,1624 ---- echo 'hello' redir END END ! v9.CheckDefFailure(lines, 'E1012:') enddef def Test_echo_void() *************** *** 1629,1635 **** enddef echo NoReturn() END ! CheckScriptFailure(lines, 'E1186:', 5) lines =<< trim END vim9script --- 1629,1635 ---- enddef echo NoReturn() END ! v9.CheckScriptFailure(lines, 'E1186:', 5) lines =<< trim END vim9script *************** *** 1641,1647 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1186:', 1) enddef def Test_cmdwin_block() --- 1641,1647 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1186:', 1) enddef def Test_cmdwin_block() *************** *** 1661,1741 **** var lines =<< trim END g:notexist:cmd END ! CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist'], 1) lines =<< trim END g-pat-cmd END ! CheckDefAndScriptFailure(lines, 'E1241:', 1) lines =<< trim END g.pat.cmd END ! CheckDefAndScriptFailure(lines, ['E1001: Variable not found: g', 'E121: Undefined variable: g'], 1) lines =<< trim END s:notexist:repl END ! CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist'], 1) lines =<< trim END s-pat-repl END ! CheckDefAndScriptFailure(lines, 'E1241:', 1) lines =<< trim END s.pat.repl END ! CheckDefAndScriptFailure(lines, ['E1001: Variable not found: s', 'E121: Undefined variable: s'], 1) lines =<< trim END w:notexist->len() END ! CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1) lines =<< trim END b:notexist->len() END ! CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1) lines =<< trim END t:notexist->len() END ! CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1) enddef def Test_no_space_after_command() var lines =<< trim END g /pat/cmd END ! CheckDefAndScriptFailure(lines, 'E1242:', 1) lines =<< trim END g #pat#cmd END ! CheckDefAndScriptFailure(lines, 'E1242:', 1) lines =<< trim END g#pat#cmd END ! CheckDefAndScriptSuccess(lines) lines =<< trim END g# pat#cmd END ! CheckDefAndScriptSuccess(lines) lines =<< trim END s /pat/repl END ! CheckDefAndScriptFailure(lines, 'E1242:', 1) lines =<< trim END s #pat#repl END ! CheckDefAndScriptFailure(lines, 'E1242:', 1) lines =<< trim END s#pat#repl END ! CheckDefExecAndScriptFailure(lines, 'E486:', 1) lines =<< trim END s# pat#repl END ! CheckDefExecAndScriptFailure(lines, 'E486:', 1) enddef " Test for the 'previewpopup' option --- 1661,1741 ---- var lines =<< trim END g:notexist:cmd END ! v9.CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist'], 1) lines =<< trim END g-pat-cmd END ! v9.CheckDefAndScriptFailure(lines, 'E1241:', 1) lines =<< trim END g.pat.cmd END ! v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: g', 'E121: Undefined variable: g'], 1) lines =<< trim END s:notexist:repl END ! v9.CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist'], 1) lines =<< trim END s-pat-repl END ! v9.CheckDefAndScriptFailure(lines, 'E1241:', 1) lines =<< trim END s.pat.repl END ! v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: s', 'E121: Undefined variable: s'], 1) lines =<< trim END w:notexist->len() END ! v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1) lines =<< trim END b:notexist->len() END ! v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1) lines =<< trim END t:notexist->len() END ! v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1) enddef def Test_no_space_after_command() var lines =<< trim END g /pat/cmd END ! v9.CheckDefAndScriptFailure(lines, 'E1242:', 1) lines =<< trim END g #pat#cmd END ! v9.CheckDefAndScriptFailure(lines, 'E1242:', 1) lines =<< trim END g#pat#cmd END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END g# pat#cmd END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END s /pat/repl END ! v9.CheckDefAndScriptFailure(lines, 'E1242:', 1) lines =<< trim END s #pat#repl END ! v9.CheckDefAndScriptFailure(lines, 'E1242:', 1) lines =<< trim END s#pat#repl END ! v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1) lines =<< trim END s# pat#repl END ! v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1) enddef " Test for the 'previewpopup' option *** ../vim-8.2.4256/src/testdir/test_vim9_disassemble.vim 2022-01-26 21:01:11.192928481 +0000 --- src/testdir/test_vim9_disassemble.vim 2022-01-29 18:36:39.500762787 +0000 *************** *** 1,9 **** " Test the :disassemble command, and compilation as a side effect source check.vim ! source vim9.vim ! func NotCompiled() echo "not" endfunc --- 1,9 ---- " Test the :disassemble command, and compilation as a side effect source check.vim ! import './vim9.vim' as v9 ! func s:NotCompiled() echo "not" endfunc *************** *** 312,318 **** '2 RETURN void', res) END ! CheckScriptSuccess(lines) delete('Xdir', 'rf') &rtp = save_rtp --- 312,318 ---- '2 RETURN void', res) END ! v9.CheckScriptSuccess(lines) delete('Xdir', 'rf') &rtp = save_rtp *************** *** 690,711 **** res) enddef ! def FuncWithArg(arg: any) echo arg enddef ! func UserFunc() echo 'nothing' endfunc ! func UserFuncWithArg(arg) echo a:arg endfunc def s:ScriptFuncCall(): string changenr() char2nr("abc") ! Test_disassemble_new() FuncWithArg(343) ScriptFuncNew() s:ScriptFuncNew() --- 690,711 ---- res) enddef ! def s:FuncWithArg(arg: any) echo arg enddef ! func s:UserFunc() echo 'nothing' endfunc ! func s:UserFuncWithArg(arg) echo a:arg endfunc def s:ScriptFuncCall(): string changenr() char2nr("abc") ! g:Test_disassemble_new() FuncWithArg(343) ScriptFuncNew() s:ScriptFuncNew() *************** *** 728,739 **** '\d PUSHS "abc"\_s*' .. '\d BCALL char2nr(argc 1)\_s*' .. '\d DROP\_s*' .. ! 'Test_disassemble_new()\_s*' .. '\d DCALL Test_disassemble_new(argc 0)\_s*' .. '\d DROP\_s*' .. 'FuncWithArg(343)\_s*' .. '\d\+ PUSHNR 343\_s*' .. ! '\d\+ DCALL FuncWithArg(argc 1)\_s*' .. '\d\+ DROP\_s*' .. 'ScriptFuncNew()\_s*' .. '\d\+ DCALL \d\+_ScriptFuncNew(argc 0)\_s*' .. --- 728,739 ---- '\d PUSHS "abc"\_s*' .. '\d BCALL char2nr(argc 1)\_s*' .. '\d DROP\_s*' .. ! 'g:Test_disassemble_new()\_s*' .. '\d DCALL Test_disassemble_new(argc 0)\_s*' .. '\d DROP\_s*' .. 'FuncWithArg(343)\_s*' .. '\d\+ PUSHNR 343\_s*' .. ! '\d\+ DCALL \d\+_FuncWithArg(argc 1)\_s*' .. '\d\+ DROP\_s*' .. 'ScriptFuncNew()\_s*' .. '\d\+ DCALL \d\+_ScriptFuncNew(argc 0)\_s*' .. *************** *** 742,752 **** '\d\+ DCALL \d\+_ScriptFuncNew(argc 0)\_s*' .. '\d\+ DROP\_s*' .. 'UserFunc()\_s*' .. ! '\d\+ UCALL UserFunc(argc 0)\_s*' .. '\d\+ DROP\_s*' .. 'UserFuncWithArg("foo")\_s*' .. '\d\+ PUSHS "foo"\_s*' .. ! '\d\+ UCALL UserFuncWithArg(argc 1)\_s*' .. '\d\+ DROP\_s*' .. 'var FuncRef = function("UserFunc")\_s*' .. '\d\+ PUSHS "UserFunc"\_s*' .. --- 742,752 ---- '\d\+ DCALL \d\+_ScriptFuncNew(argc 0)\_s*' .. '\d\+ DROP\_s*' .. 'UserFunc()\_s*' .. ! '\d\+ UCALL <80>R\d\+_UserFunc(argc 0)\_s*' .. '\d\+ DROP\_s*' .. 'UserFuncWithArg("foo")\_s*' .. '\d\+ PUSHS "foo"\_s*' .. ! '\d\+ UCALL <80>R\d\+_UserFuncWithArg(argc 1)\_s*' .. '\d\+ DROP\_s*' .. 'var FuncRef = function("UserFunc")\_s*' .. '\d\+ PUSHS "UserFunc"\_s*' .. *************** *** 811,817 **** def EchoArg(arg: string): string return arg enddef ! def RefThis(): func return function('EchoArg') enddef def s:ScriptPCall() --- 811,817 ---- def EchoArg(arg: string): string return arg enddef ! def s:RefThis(): func return function('EchoArg') enddef def s:ScriptPCall() *************** *** 822,828 **** var res = execute('disass s:ScriptPCall') assert_match('\d\+_ScriptPCall\_s*' .. 'RefThis()("text")\_s*' .. ! '\d DCALL RefThis(argc 0)\_s*' .. '\d PUSHS "text"\_s*' .. '\d PCALL top (argc 1)\_s*' .. '\d PCALL end\_s*' .. --- 822,828 ---- var res = execute('disass s:ScriptPCall') assert_match('\d\+_ScriptPCall\_s*' .. 'RefThis()("text")\_s*' .. ! '\d DCALL \d\+_RefThis(argc 0)\_s*' .. '\d PUSHS "text"\_s*' .. '\d PCALL top (argc 1)\_s*' .. '\d PCALL end\_s*' .. *************** *** 1116,1122 **** instr) enddef ! def WithLambda(): string var F = (a) => "X" .. a .. "X" return F("x") enddef --- 1116,1122 ---- instr) enddef ! def s:WithLambda(): string var F = (a) => "X" .. a .. "X" return F("x") enddef *************** *** 1149,1155 **** instr) enddef ! def LambdaWithType(): number var Ref = (a: number) => a + 10 return Ref(g:value) enddef --- 1149,1155 ---- instr) enddef ! def s:LambdaWithType(): number var Ref = (a: number) => a + 10 return Ref(g:value) enddef *************** *** 1210,1216 **** instr) enddef ! def AndOr(arg: any): string if arg == 1 && arg != 2 || arg == 4 return 'yes' endif --- 1210,1216 ---- instr) enddef ! def s:AndOr(arg: any): string if arg == 1 && arg != 2 || arg == 4 return 'yes' endif *************** *** 1239,1245 **** instr) enddef ! def AndConstant(arg: any): string if true && arg return "yes" endif --- 1239,1245 ---- instr) enddef ! def s:AndConstant(arg: any): string if true && arg return "yes" endif *************** *** 1271,1277 **** instr) enddef ! def ForLoop(): list var res: list for i in range(3) res->add(i) --- 1271,1277 ---- instr) enddef ! def s:ForLoop(): list var res: list for i in range(3) res->add(i) *************** *** 1304,1310 **** instr) enddef ! def ForLoopEval(): string var res = "" for str in eval('["one", "two"]') res ..= str --- 1304,1310 ---- instr) enddef ! def s:ForLoopEval(): string var res = "" for str in eval('["one", "two"]') res ..= str *************** *** 1340,1346 **** instr) enddef ! def ForLoopUnpack() for [x1, x2] in [[1, 2], [3, 4]] echo x1 x2 endfor --- 1340,1346 ---- instr) enddef ! def s:ForLoopUnpack() for [x1, x2] in [[1, 2], [3, 4]] echo x1 x2 endfor *************** *** 1373,1379 **** instr) enddef ! def ForLoopContinue() for nr in [1, 2] try echo "ok" --- 1373,1379 ---- instr) enddef ! def s:ForLoopContinue() for nr in [1, 2] try echo "ok" *************** *** 1432,1438 **** let g:number = 42 ! def TypeCast() var l: list = [23, g:number] enddef --- 1432,1438 ---- let g:number = 42 ! def s:TypeCast() var l: list = [23, g:number] enddef *************** *** 1450,1456 **** instr) enddef ! def Computing() var nr = 3 var nrres = nr + 7 nrres = nr - 7 --- 1450,1456 ---- instr) enddef ! def s:Computing() var nr = 3 var nrres = nr + 7 nrres = nr - 7 *************** *** 1525,1531 **** endif enddef ! def AddListBlob() var reslist = [1, 2] + [3, 4] var resblob = 0z1122 + 0z3344 enddef --- 1525,1531 ---- endif enddef ! def s:AddListBlob() var reslist = [1, 2] + [3, 4] var resblob = 0z1122 + 0z3344 enddef *************** *** 1551,1557 **** enddef let g:aa = 'aa' ! def ConcatString(): string var res = g:aa .. "bb" return res enddef --- 1551,1557 ---- enddef let g:aa = 'aa' ! def s:ConcatString(): string var res = g:aa .. "bb" return res enddef *************** *** 1569,1575 **** assert_equal('aabb', ConcatString()) enddef ! def StringIndex(): string var s = "abcd" var res = s[1] return res --- 1569,1575 ---- assert_equal('aabb', ConcatString()) enddef ! def s:StringIndex(): string var s = "abcd" var res = s[1] return res *************** *** 1590,1596 **** assert_equal('b', StringIndex()) enddef ! def StringSlice(): string var s = "abcd" var res = s[1 : 8] return res --- 1590,1596 ---- assert_equal('b', StringIndex()) enddef ! def s:StringSlice(): string var s = "abcd" var res = s[1 : 8] return res *************** *** 1612,1618 **** assert_equal('bcd', StringSlice()) enddef ! def ListIndex(): number var l = [1, 2, 3] var res = l[1] return res --- 1612,1618 ---- assert_equal('bcd', StringSlice()) enddef ! def s:ListIndex(): number var l = [1, 2, 3] var res = l[1] return res *************** *** 1636,1642 **** assert_equal(2, ListIndex()) enddef ! def ListSlice(): list var l = [1, 2, 3] var res = l[1 : 8] return res --- 1636,1642 ---- assert_equal(2, ListIndex()) enddef ! def s:ListSlice(): list var l = [1, 2, 3] var res = l[1 : 8] return res *************** *** 1661,1667 **** assert_equal([2, 3], ListSlice()) enddef ! def DictMember(): number var d = {item: 1} var res = d.item res = d["item"] --- 1661,1667 ---- assert_equal([2, 3], ListSlice()) enddef ! def s:DictMember(): number var d = {item: 1} var res = d.item res = d["item"] *************** *** 1692,1698 **** enddef let somelist = [1, 2, 3, 4, 5] ! def AnyIndex(): number var res = g:somelist[2] return res enddef --- 1692,1698 ---- enddef let somelist = [1, 2, 3, 4, 5] ! def s:AnyIndex(): number var res = g:somelist[2] return res enddef *************** *** 1713,1719 **** assert_equal(3, AnyIndex()) enddef ! def AnySlice(): list var res = g:somelist[1 : 3] return res enddef --- 1713,1719 ---- assert_equal(3, AnyIndex()) enddef ! def s:AnySlice(): list var res = g:somelist[1 : 3] return res enddef *************** *** 1735,1741 **** assert_equal([2, 3, 4], AnySlice()) enddef ! def NegateNumber(): number g:nr = 9 var plus = +g:nr var minus = -g:nr --- 1735,1741 ---- assert_equal([2, 3, 4], AnySlice()) enddef ! def s:NegateNumber(): number g:nr = 9 var plus = +g:nr var minus = -g:nr *************** *** 1761,1767 **** assert_equal(-9, NegateNumber()) enddef ! def InvertBool(): bool var flag = true var invert = !flag var res = !!flag --- 1761,1767 ---- assert_equal(-9, NegateNumber()) enddef ! def s:InvertBool(): bool var flag = true var invert = !flag var res = !!flag *************** *** 1786,1792 **** assert_equal(true, InvertBool()) enddef ! def ReturnBool(): bool var one = 1 var zero = 0 var none: number --- 1786,1792 ---- assert_equal(true, InvertBool()) enddef ! def s:ReturnBool(): bool var one = 1 var zero = 0 var none: number *************** *** 1818,1824 **** assert_equal(true, InvertBool()) enddef ! def AutoInit() var t: number t = 1 t = 0 --- 1818,1824 ---- assert_equal(true, InvertBool()) enddef ! def s:AutoInit() var t: number t = 1 t = 0 *** ../vim-8.2.4256/src/testdir/test_vim9_expr.vim 2022-01-18 10:37:23.753431035 +0000 --- src/testdir/test_vim9_expr.vim 2022-01-29 19:15:25.819550110 +0000 *************** *** 1,7 **** " Tests for Vim9 script expressions source check.vim ! source vim9.vim let g:cond = v:false def FuncOne(arg: number): string --- 1,7 ---- " Tests for Vim9 script expressions source check.vim ! import './vim9.vim' as v9 let g:cond = v:false def FuncOne(arg: number): string *************** *** 66,72 **** var Z = g:cond ? FuncOne : FuncTwo assert_equal(123, Z(3)) END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr1_trinary_vimscript() --- 66,72 ---- var Z = g:cond ? FuncOne : FuncTwo assert_equal(123, Z(3)) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr1_trinary_vimscript() *************** *** 77,83 **** : 'no' assert_equal('yes', name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false --- 77,83 ---- : 'no' assert_equal('yes', name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false *************** *** 85,91 **** : 'no' assert_equal('no', name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false ? --- 85,91 ---- : 'no' assert_equal('no', name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false ? *************** *** 93,99 **** 'no' assert_equal('no', name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false ? # comment --- 93,99 ---- 'no' assert_equal('no', name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false ? # comment *************** *** 102,149 **** 'no' # comment assert_equal('no', name) END ! CheckDefAndScriptSuccess(lines) # check white space lines =<< trim END var name = v:true?1:2 END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''?'' at "?1:2"', 1) lines =<< trim END var name = v:true? 1 : 2 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = v:true ?1 : 2 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = v:true ? 1: 2 END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after '':'' at ": 2"', 1) lines =<< trim END var name = v:true ? 1 :2 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = 'x' ? 1 : 2 END ! CheckDefAndScriptFailure(lines, 'E1135:', 1) lines =<< trim END var name = [] ? 1 : 2 END ! CheckDefExecAndScriptFailure(lines, 'E745:', 1) lines =<< trim END var name = {} ? 1 : 2 END ! CheckDefExecAndScriptFailure(lines, 'E728:', 1) # check after failure eval_flags is reset lines =<< trim END --- 102,149 ---- 'no' # comment assert_equal('no', name) END ! v9.CheckDefAndScriptSuccess(lines) # check white space lines =<< trim END var name = v:true?1:2 END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''?'' at "?1:2"', 1) lines =<< trim END var name = v:true? 1 : 2 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = v:true ?1 : 2 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = v:true ? 1: 2 END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after '':'' at ": 2"', 1) lines =<< trim END var name = v:true ? 1 :2 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = 'x' ? 1 : 2 END ! v9.CheckDefAndScriptFailure(lines, 'E1135:', 1) lines =<< trim END var name = [] ? 1 : 2 END ! v9.CheckDefExecAndScriptFailure(lines, 'E745:', 1) lines =<< trim END var name = {} ? 1 : 2 END ! v9.CheckDefExecAndScriptFailure(lines, 'E728:', 1) # check after failure eval_flags is reset lines =<< trim END *************** *** 153,159 **** endtry assert_equal(v:true, eval(string(v:true))) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END try --- 153,159 ---- endtry assert_equal(v:true, eval(string(v:true))) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END try *************** *** 162,214 **** endtry assert_equal(v:true, eval(string(v:true))) END ! CheckDefAndScriptSuccess(lines) enddef func Test_expr1_trinary_fails() ! call CheckDefAndScriptFailure(["var x = 1 ? 'one'"], "Missing ':' after '?'", 1) let msg = "White space required before and after '?'" ! call CheckDefAndScriptFailure(["var x = 1? 'one' : 'two'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 ?'one' : 'two'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1?'one' : 'two'"], msg, 1) let lines =<< trim END var x = 1 ?'one' : 'two' # comment END ! call CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''?'' at "?''one'' : ''two''"', 2) let msg = "White space required before and after ':'" ! call CheckDefAndScriptFailure(["var x = 1 ? 'one': 'two'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 ? 'one' :'two'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 ? 'one':'two'"], msg, 1) let lines =<< trim END var x = 1 ? 'one' :'two' # Comment END ! call CheckDefAndScriptFailure(lines, 'E1004: White space required before and after '':'' at ":''two''"', 2) ! call CheckDefAndScriptFailure(["var x = 'x' ? 'one' : 'two'"], 'E1135:', 1) ! call CheckDefAndScriptFailure(["var x = 0z1234 ? 'one' : 'two'"], 'E974:', 1) ! call CheckDefExecAndScriptFailure(["var x = [] ? 'one' : 'two'"], 'E745:', 1) ! call CheckDefExecAndScriptFailure(["var x = {} ? 'one' : 'two'"], 'E728:', 1) ! ! call CheckDefExecFailure(["var x = false ? "], 'E1097:', 3) ! call CheckScriptFailure(['vim9script', "var x = false ? "], 'E15:', 2) ! call CheckDefExecFailure(["var x = false ? 'one' : "], 'E1097:', 3) ! call CheckScriptFailure(['vim9script', "var x = false ? 'one' : "], 'E15:', 2) ! call CheckDefExecAndScriptFailure(["var x = true ? xxx : 'foo'"], ['E1001:', 'E121:'], 1) ! call CheckDefExecAndScriptFailure(["var x = false ? 'foo' : xxx"], ['E1001:', 'E121:'], 1) if has('float') ! call CheckDefAndScriptFailure(["var x = 0.1 ? 'one' : 'two'"], 'E805:', 1) endif " missing argument detected even when common type is used ! call CheckDefAndScriptFailure([ \ 'var X = FuncOne', \ 'var Y = FuncTwo', \ 'var Z = g:cond ? FuncOne : FuncTwo', --- 162,214 ---- endtry assert_equal(v:true, eval(string(v:true))) END ! v9.CheckDefAndScriptSuccess(lines) enddef func Test_expr1_trinary_fails() ! call v9.CheckDefAndScriptFailure(["var x = 1 ? 'one'"], "Missing ':' after '?'", 1) let msg = "White space required before and after '?'" ! call v9.CheckDefAndScriptFailure(["var x = 1? 'one' : 'two'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 ?'one' : 'two'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1?'one' : 'two'"], msg, 1) let lines =<< trim END var x = 1 ?'one' : 'two' # comment END ! call v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''?'' at "?''one'' : ''two''"', 2) let msg = "White space required before and after ':'" ! call v9.CheckDefAndScriptFailure(["var x = 1 ? 'one': 'two'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 ? 'one' :'two'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 ? 'one':'two'"], msg, 1) let lines =<< trim END var x = 1 ? 'one' :'two' # Comment END ! call v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after '':'' at ":''two''"', 2) ! call v9.CheckDefAndScriptFailure(["var x = 'x' ? 'one' : 'two'"], 'E1135:', 1) ! call v9.CheckDefAndScriptFailure(["var x = 0z1234 ? 'one' : 'two'"], 'E974:', 1) ! call v9.CheckDefExecAndScriptFailure(["var x = [] ? 'one' : 'two'"], 'E745:', 1) ! call v9.CheckDefExecAndScriptFailure(["var x = {} ? 'one' : 'two'"], 'E728:', 1) ! ! call v9.CheckDefExecFailure(["var x = false ? "], 'E1097:', 3) ! call v9.CheckScriptFailure(['vim9script', "var x = false ? "], 'E15:', 2) ! call v9.CheckDefExecFailure(["var x = false ? 'one' : "], 'E1097:', 3) ! call v9.CheckScriptFailure(['vim9script', "var x = false ? 'one' : "], 'E15:', 2) ! call v9.CheckDefExecAndScriptFailure(["var x = true ? xxx : 'foo'"], ['E1001:', 'E121:'], 1) ! call v9.CheckDefExecAndScriptFailure(["var x = false ? 'foo' : xxx"], ['E1001:', 'E121:'], 1) if has('float') ! call v9.CheckDefAndScriptFailure(["var x = 0.1 ? 'one' : 'two'"], 'E805:', 1) endif " missing argument detected even when common type is used ! call v9.CheckDefAndScriptFailure([ \ 'var X = FuncOne', \ 'var Y = FuncTwo', \ 'var Z = g:cond ? FuncOne : FuncTwo', *************** *** 235,255 **** assert_equal(456, 0.0 ?? 456) endif END ! CheckDefAndScriptSuccess(lines) var msg = "White space required before and after '??'" ! call CheckDefAndScriptFailure(["var x = 1?? 'one' : 'two'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 ??'one' : 'two'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1??'one' : 'two'"], msg, 1) lines =<< trim END var x = 1 ??'one' : 'two' #comment END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''??'' at "??''one'' : ''two''"', 2) enddef ! def Record(val: any): any g:vals->add(val) return val enddef --- 235,255 ---- assert_equal(456, 0.0 ?? 456) endif END ! v9.CheckDefAndScriptSuccess(lines) var msg = "White space required before and after '??'" ! call v9.CheckDefAndScriptFailure(["var x = 1?? 'one' : 'two'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 ??'one' : 'two'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1??'one' : 'two'"], msg, 1) lines =<< trim END var x = 1 ??'one' : 'two' #comment END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''??'' at "??''one'' : ''two''"', 2) enddef ! def g:Record(val: any): any g:vals->add(val) return val enddef *************** *** 270,304 **** assert_equal(false, 0 || false) g:vals = [] ! assert_equal(true, Record(1) || Record(3)) assert_equal([1], g:vals) g:vals = [] ! assert_equal(true, Record(0) || Record(1)) assert_equal([0, 1], g:vals) g:vals = [] ! assert_equal(true, Record(0) || Record(true)) assert_equal([0, true], g:vals) g:vals = [] ! assert_equal(true, Record(0) ! || Record(1) ! || Record(0)) assert_equal([0, 1], g:vals) g:vals = [] ! assert_equal(true, Record(0) ! || Record(true) ! || Record(0)) assert_equal([0, true], g:vals) g:vals = [] ! assert_equal(true, Record(true) || Record(false)) assert_equal([true], g:vals) g:vals = [] ! assert_equal(false, Record(0) || Record(false) || Record(0)) assert_equal([0, false, 0], g:vals) g:vals = [] --- 270,304 ---- assert_equal(false, 0 || false) g:vals = [] ! assert_equal(true, g:Record(1) || g:Record(3)) assert_equal([1], g:vals) g:vals = [] ! assert_equal(true, g:Record(0) || g:Record(1)) assert_equal([0, 1], g:vals) g:vals = [] ! assert_equal(true, g:Record(0) || g:Record(true)) assert_equal([0, true], g:vals) g:vals = [] ! assert_equal(true, g:Record(0) ! || g:Record(1) ! || g:Record(0)) assert_equal([0, 1], g:vals) g:vals = [] ! assert_equal(true, g:Record(0) ! || g:Record(true) ! || g:Record(0)) assert_equal([0, true], g:vals) g:vals = [] ! assert_equal(true, g:Record(true) || g:Record(false)) assert_equal([true], g:vals) g:vals = [] ! assert_equal(false, g:Record(0) || g:Record(false) || g:Record(0)) assert_equal([0, false, 0], g:vals) g:vals = [] *************** *** 315,321 **** endif assert_equal([1], g:vals) END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr2_vimscript() --- 315,321 ---- endif assert_equal([1], g:vals) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr2_vimscript() *************** *** 325,331 **** || 1 assert_equal(true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false --- 325,331 ---- || 1 assert_equal(true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false *************** *** 333,339 **** || v:false assert_equal(v:true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false || --- 333,339 ---- || v:false assert_equal(v:true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false || *************** *** 341,347 **** v:false assert_equal(v:true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false || # comment --- 341,347 ---- v:false assert_equal(v:true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:false || # comment *************** *** 351,398 **** v:false # comment assert_equal(v:true, name) END ! CheckDefAndScriptSuccess(lines) # check white space lines =<< trim END var name = v:true||v:true END ! CheckDefExecAndScriptFailure(lines, 'E1004: White space required before and after ''||'' at "||v:true"', 1) lines =<< trim END var name = v:true ||v:true END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = v:true|| v:true END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) enddef def Test_expr2_fails() var msg = "White space required before and after '||'" ! call CheckDefAndScriptFailure(["var x = 1||0"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 ||0"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1|| 0"], msg, 1) ! call CheckDefFailure(["var x = false || "], 'E1097:', 3) ! call CheckScriptFailure(['vim9script', "var x = false || "], 'E15:', 2) # script does not fail, the second expression is skipped ! call CheckDefFailure(["var x = 1 || xxx"], 'E1001:', 1) ! call CheckDefAndScriptFailure(["var x = [] || false"], ['E1012:', 'E745:'], 1) ! call CheckDefAndScriptFailure(["if 'yes' || 0", 'echo 0', 'endif'], ['E1012: Type mismatch; expected bool but got string', 'E1135: Using a String as a Bool'], 1) ! call CheckDefAndScriptFailure(["var x = 3 || false"], ['E1012:', 'E1023:'], 1) ! call CheckDefAndScriptFailure(["var x = false || 3"], ['E1012:', 'E1023:'], 1) ! call CheckDefAndScriptFailure(["if 3"], 'E1023:', 1) ! call CheckDefExecAndScriptFailure(['var x = 3', 'if x', 'endif'], 'E1023:', 2) ! call CheckDefAndScriptFailure(["var x = [] || false"], ['E1012: Type mismatch; expected bool but got list', 'E745:'], 1) var lines =<< trim END vim9script --- 351,398 ---- v:false # comment assert_equal(v:true, name) END ! v9.CheckDefAndScriptSuccess(lines) # check white space lines =<< trim END var name = v:true||v:true END ! v9.CheckDefExecAndScriptFailure(lines, 'E1004: White space required before and after ''||'' at "||v:true"', 1) lines =<< trim END var name = v:true ||v:true END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = v:true|| v:true END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) enddef def Test_expr2_fails() var msg = "White space required before and after '||'" ! v9.CheckDefAndScriptFailure(["var x = 1||0"], msg, 1) ! v9.CheckDefAndScriptFailure(["var x = 1 ||0"], msg, 1) ! v9.CheckDefAndScriptFailure(["var x = 1|| 0"], msg, 1) ! v9.CheckDefFailure(["var x = false || "], 'E1097:', 3) ! v9.CheckScriptFailure(['vim9script', "var x = false || "], 'E15:', 2) # script does not fail, the second expression is skipped ! v9.CheckDefFailure(["var x = 1 || xxx"], 'E1001:', 1) ! v9.CheckDefAndScriptFailure(["var x = [] || false"], ['E1012:', 'E745:'], 1) ! v9.CheckDefAndScriptFailure(["if 'yes' || 0", 'echo 0', 'endif'], ['E1012: Type mismatch; expected bool but got string', 'E1135: Using a String as a Bool'], 1) ! v9.CheckDefAndScriptFailure(["var x = 3 || false"], ['E1012:', 'E1023:'], 1) ! v9.CheckDefAndScriptFailure(["var x = false || 3"], ['E1012:', 'E1023:'], 1) ! v9.CheckDefAndScriptFailure(["if 3"], 'E1023:', 1) ! v9.CheckDefExecAndScriptFailure(['var x = 3', 'if x', 'endif'], 'E1023:', 2) ! v9.CheckDefAndScriptFailure(["var x = [] || false"], ['E1012: Type mismatch; expected bool but got list', 'E745:'], 1) var lines =<< trim END vim9script *************** *** 400,413 **** ||true # comment END ! CheckScriptFailure(lines, 'E1004: White space required before and after ''||'' at "||true"', 3) lines =<< trim END var x = false || false || a.b END ! CheckDefFailure(lines, 'E1001:', 3) enddef " test && --- 400,413 ---- ||true # comment END ! v9.CheckScriptFailure(lines, 'E1004: White space required before and after ''||'' at "||true"', 3) lines =<< trim END var x = false || false || a.b END ! v9.CheckDefFailure(lines, 'E1001:', 3) enddef " test && *************** *** 425,454 **** assert_equal(true, 1 && true) g:vals = [] ! assert_equal(true, Record(true) && Record(1)) assert_equal([true, 1], g:vals) g:vals = [] ! assert_equal(true, Record(1) && Record(true)) assert_equal([1, true], g:vals) g:vals = [] ! assert_equal(false, Record(0) && Record(1)) assert_equal([0], g:vals) g:vals = [] ! assert_equal(false, Record(0) && Record(1) && Record(0)) assert_equal([0], g:vals) g:vals = [] ! assert_equal(false, Record(0) && Record(4) && Record(0)) assert_equal([0], g:vals) g:vals = [] ! assert_equal(false, Record(1) && Record(true) && Record(0)) assert_equal([1, true, 0], g:vals) END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr3_vimscript() --- 425,454 ---- assert_equal(true, 1 && true) g:vals = [] ! assert_equal(true, g:Record(true) && g:Record(1)) assert_equal([true, 1], g:vals) g:vals = [] ! assert_equal(true, g:Record(1) && g:Record(true)) assert_equal([1, true], g:vals) g:vals = [] ! assert_equal(false, g:Record(0) && g:Record(1)) assert_equal([0], g:vals) g:vals = [] ! assert_equal(false, g:Record(0) && g:Record(1) && g:Record(0)) assert_equal([0], g:vals) g:vals = [] ! assert_equal(false, g:Record(0) && g:Record(4) && g:Record(0)) assert_equal([0], g:vals) g:vals = [] ! assert_equal(false, g:Record(1) && g:Record(true) && g:Record(0)) assert_equal([1, true, 0], g:vals) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr3_vimscript() *************** *** 458,464 **** && 1 assert_equal(false, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:true --- 458,464 ---- && 1 assert_equal(false, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:true *************** *** 466,472 **** && v:true assert_equal(v:true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:true && --- 466,472 ---- && v:true assert_equal(v:true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:true && *************** *** 474,480 **** v:true assert_equal(v:true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:true && # comment --- 474,480 ---- v:true assert_equal(v:true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = v:true && # comment *************** *** 484,545 **** v:true assert_equal(v:true, name) END ! CheckDefAndScriptSuccess(lines) # check white space lines =<< trim END var name = v:true&&v:true END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = v:true &&v:true END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''&&'' at "&&v:true"', 1) lines =<< trim END var name = v:true&& v:true END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) enddef def Test_expr3_fails() var msg = "White space required before and after '&&'" ! CheckDefAndScriptFailure(["var x = 1&&0"], msg, 1) ! CheckDefAndScriptFailure(["var x = 1 &&0"], msg, 1) ! CheckDefAndScriptFailure(["var x = 1&& 0"], msg, 1) var lines =<< trim END var x = 1 &&0 # comment END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''&&'' at "&&0"', 2) g:vals = [] ! CheckDefAndScriptFailure(["if 'yes' && 0", 'echo 0', 'endif'], ['E1012: Type mismatch; expected bool but got string', 'E1135: Using a String as a Bool'], 1) ! CheckDefExecAndScriptFailure(['assert_equal(false, Record(1) && Record(4) && Record(0))'], 'E1023: Using a Number as a Bool: 4', 1) lines =<< trim END if 3 && true endif END ! CheckDefAndScriptFailure(lines, ['E1012:', 'E1023:'], 1) lines =<< trim END if true && 3 endif END ! CheckDefAndScriptFailure(lines, ['E1012:', 'E1023:'], 2) lines =<< trim END if 'yes' && true endif END ! CheckDefAndScriptFailure(lines, ['E1012:', 'E1135: Using a String as a Bool'], 1) enddef " global variables to use for tests with the "any" type --- 484,545 ---- v:true assert_equal(v:true, name) END ! v9.CheckDefAndScriptSuccess(lines) # check white space lines =<< trim END var name = v:true&&v:true END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END var name = v:true &&v:true END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''&&'' at "&&v:true"', 1) lines =<< trim END var name = v:true&& v:true END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) enddef def Test_expr3_fails() var msg = "White space required before and after '&&'" ! v9.CheckDefAndScriptFailure(["var x = 1&&0"], msg, 1) ! v9.CheckDefAndScriptFailure(["var x = 1 &&0"], msg, 1) ! v9.CheckDefAndScriptFailure(["var x = 1&& 0"], msg, 1) var lines =<< trim END var x = 1 &&0 # comment END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''&&'' at "&&0"', 2) g:vals = [] ! v9.CheckDefAndScriptFailure(["if 'yes' && 0", 'echo 0', 'endif'], ['E1012: Type mismatch; expected bool but got string', 'E1135: Using a String as a Bool'], 1) ! v9.CheckDefExecAndScriptFailure(['assert_equal(false, g:Record(1) && g:Record(4) && g:Record(0))'], 'E1023: Using a Number as a Bool: 4', 1) lines =<< trim END if 3 && true endif END ! v9.CheckDefAndScriptFailure(lines, ['E1012:', 'E1023:'], 1) lines =<< trim END if true && 3 endif END ! v9.CheckDefAndScriptFailure(lines, ['E1012:', 'E1023:'], 2) lines =<< trim END if 'yes' && true endif END ! v9.CheckDefAndScriptFailure(lines, ['E1012:', 'E1135: Using a String as a Bool'], 1) enddef " global variables to use for tests with the "any" type *************** *** 663,680 **** assert_equal(true, OneFunc('abc') == TwoFunc('123')) endif END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(["var x = 'a' == xxx"], ['E1001:', 'E121:'], 1) ! CheckDefFailure(["var x = 'a' == "], 'E1097:', 3) ! CheckScriptFailure(['vim9script', "var x = 'a' == "], 'E15:', 2) ! ! CheckDefExecAndScriptFailure(['var items: any', 'eval 1 + 1', 'eval 2 + 2', 'if items == []', 'endif'], ['E691:', 'E1072:'], 4) ! ! CheckDefExecAndScriptFailure(['var x: any = "a"', 'echo x == true'], 'E1072: Cannot compare string with bool', 2) ! CheckDefExecAndScriptFailure(["var x: any = true", 'echo x == ""'], 'E1072: Cannot compare bool with string', 2) ! CheckDefExecAndScriptFailure(["var x: any = 99", 'echo x == true'], ['E1138', 'E1072:'], 2) ! CheckDefExecAndScriptFailure(["var x: any = 'a'", 'echo x == 99'], ['E1030:', 'E1072:'], 2) lines =<< trim END vim9script --- 663,680 ---- assert_equal(true, OneFunc('abc') == TwoFunc('123')) endif END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(["var x = 'a' == xxx"], ['E1001:', 'E121:'], 1) ! v9.CheckDefFailure(["var x = 'a' == "], 'E1097:', 3) ! v9.CheckScriptFailure(['vim9script', "var x = 'a' == "], 'E15:', 2) ! ! v9.CheckDefExecAndScriptFailure(['var items: any', 'eval 1 + 1', 'eval 2 + 2', 'if items == []', 'endif'], ['E691:', 'E1072:'], 4) ! ! v9.CheckDefExecAndScriptFailure(['var x: any = "a"', 'echo x == true'], 'E1072: Cannot compare string with bool', 2) ! v9.CheckDefExecAndScriptFailure(["var x: any = true", 'echo x == ""'], 'E1072: Cannot compare bool with string', 2) ! v9.CheckDefExecAndScriptFailure(["var x: any = 99", 'echo x == true'], ['E1138', 'E1072:'], 2) ! v9.CheckDefExecAndScriptFailure(["var x: any = 'a'", 'echo x == 99'], ['E1030:', 'E1072:'], 2) lines =<< trim END vim9script *************** *** 686,692 **** g:notReached = true Compare() END ! CheckScriptFailure(lines, 'E1030: Using a String as a Number: "3"') assert_true(g:notReached) if has('float') --- 686,692 ---- g:notReached = true Compare() END ! v9.CheckScriptFailure(lines, 'E1030: Using a String as a Number: "3"') assert_true(g:notReached) if has('float') *************** *** 700,706 **** g:notReached = true Compare() END ! CheckScriptFailure(lines, 'E892: Using a String as a Float') assert_true(g:notReached) endif --- 700,706 ---- g:notReached = true Compare() END ! v9.CheckScriptFailure(lines, 'E892: Using a String as a Float') assert_true(g:notReached) endif *************** *** 709,738 **** def Test_expr4_wrong_type() for op in ['>', '>=', '<', '<=', '=~', '!~'] ! CheckDefExecAndScriptFailure([ "var a: any = 'a'", 'var b: any = true', 'echo a ' .. op .. ' b'], 'E1072:', 3) endfor for op in ['>', '>=', '<', '<='] ! CheckDefExecAndScriptFailure([ "var n: any = 2", 'echo n ' .. op .. ' "3"'], ['E1030:', 'E1072:'], 2) endfor for op in ['=~', '!~'] ! CheckDefExecAndScriptFailure([ "var n: any = 2", 'echo n ' .. op .. ' "3"'], 'E1072:', 2) endfor ! CheckDefAndScriptFailure([ 'echo v:none == true'], 'E1072:', 1) ! CheckDefAndScriptFailure([ 'echo false >= true'], 'E1072:', 1) ! CheckDefExecAndScriptFailure([ "var n: any = v:none", 'echo n == true'], 'E1072:', 2) ! CheckDefExecAndScriptFailure([ "var n: any = v:none", 'echo n < true'], 'E1072:', 2) enddef --- 709,738 ---- def Test_expr4_wrong_type() for op in ['>', '>=', '<', '<=', '=~', '!~'] ! v9.CheckDefExecAndScriptFailure([ "var a: any = 'a'", 'var b: any = true', 'echo a ' .. op .. ' b'], 'E1072:', 3) endfor for op in ['>', '>=', '<', '<='] ! v9.CheckDefExecAndScriptFailure([ "var n: any = 2", 'echo n ' .. op .. ' "3"'], ['E1030:', 'E1072:'], 2) endfor for op in ['=~', '!~'] ! v9.CheckDefExecAndScriptFailure([ "var n: any = 2", 'echo n ' .. op .. ' "3"'], 'E1072:', 2) endfor ! v9.CheckDefAndScriptFailure([ 'echo v:none == true'], 'E1072:', 1) ! v9.CheckDefAndScriptFailure([ 'echo false >= true'], 'E1072:', 1) ! v9.CheckDefExecAndScriptFailure([ "var n: any = v:none", 'echo n == true'], 'E1072:', 2) ! v9.CheckDefExecAndScriptFailure([ "var n: any = v:none", 'echo n < true'], 'E1072:', 2) enddef *************** *** 819,825 **** assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_is', [123])) assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [999])) END ! CheckDefAndScriptSuccess(lines) enddef " test > comperator --- 819,825 ---- assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_is', [123])) assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [999])) END ! v9.CheckDefAndScriptSuccess(lines) enddef " test > comperator *************** *** 845,851 **** assert_false(ff > 3.0) endif END ! CheckDefAndScriptSuccess(lines) enddef " test >= comperator --- 845,851 ---- assert_false(ff > 3.0) endif END ! v9.CheckDefAndScriptSuccess(lines) enddef " test >= comperator *************** *** 866,872 **** assert_false(ff >= 3.0) endif END ! CheckDefAndScriptSuccess(lines) enddef " test < comperator --- 866,872 ---- assert_false(ff >= 3.0) endif END ! v9.CheckDefAndScriptSuccess(lines) enddef " test < comperator *************** *** 888,894 **** assert_true(ff < 3.0) endif END ! CheckDefAndScriptSuccess(lines) enddef " test <= comperator --- 888,894 ---- assert_true(ff < 3.0) endif END ! v9.CheckDefAndScriptSuccess(lines) enddef " test <= comperator *************** *** 913,919 **** assert_true(ff <= 3.0) endif END ! CheckDefAndScriptSuccess(lines) enddef " test =~ comperator --- 913,919 ---- assert_true(ff <= 3.0) endif END ! v9.CheckDefAndScriptSuccess(lines) enddef " test =~ comperator *************** *** 930,936 **** assert_equal(true, 'abc' =~? 'ABC') set noignorecase END ! CheckDefAndScriptSuccess(lines) enddef " test !~ comperator --- 930,936 ---- assert_equal(true, 'abc' =~? 'ABC') set noignorecase END ! v9.CheckDefAndScriptSuccess(lines) enddef " test !~ comperator *************** *** 942,948 **** assert_equal(false, '2' !~ '[0-9]') END ! CheckDefAndScriptSuccess(lines) enddef " test is comperator --- 942,948 ---- assert_equal(false, '2' !~ '[0-9]') END ! v9.CheckDefAndScriptSuccess(lines) enddef " test is comperator *************** *** 960,966 **** var otherblob = myblob assert_true(myblob is otherblob) END ! CheckDefAndScriptSuccess(lines) enddef " test isnot comperator --- 960,966 ---- var otherblob = myblob assert_true(myblob is otherblob) END ! v9.CheckDefAndScriptSuccess(lines) enddef " test isnot comperator *************** *** 979,988 **** var otherblob = myblob assert_false(myblob isnot otherblob) END ! CheckDefAndScriptSuccess(lines) enddef ! def RetVoid() var x = 1 enddef --- 979,988 ---- var otherblob = myblob assert_false(myblob isnot otherblob) END ! v9.CheckDefAndScriptSuccess(lines) enddef ! def g:RetVoid() var x = 1 enddef *************** *** 993,999 **** < 1 assert_equal(true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 123 --- 993,999 ---- < 1 assert_equal(true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 123 *************** *** 1001,1014 **** != 123 assert_equal(false, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 123 == 123 assert_equal(true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var list = [1, 2, 3] --- 1001,1014 ---- != 123 assert_equal(false, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 123 == 123 assert_equal(true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var list = [1, 2, 3] *************** *** 1016,1022 **** is list assert_equal(true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var list = [1, 2, 3] --- 1016,1022 ---- is list assert_equal(true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var list = [1, 2, 3] *************** *** 1025,1031 **** is list assert_equal(true, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var myblob = 0z1234 --- 1025,1031 ---- is list assert_equal(true, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var myblob = 0z1234 *************** *** 1033,1172 **** isnot 0z11 assert_equal(true, name) END ! CheckDefAndScriptSuccess(lines) # spot check mismatching types lines =<< trim END echo '' == 0 END ! CheckDefAndScriptFailure(lines, 'E1072:', 1) lines =<< trim END echo v:true > v:false END ! CheckDefAndScriptFailure(lines, 'Cannot compare bool with bool', 1) lines =<< trim END echo 123 is 123 END ! CheckDefAndScriptFailure(lines, 'Cannot use "is" with number', 1) # check missing white space lines =<< trim END echo 2>3 END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''>'' at ">3"', 1) lines =<< trim END echo 2 >3 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 2> 3 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 2!=3 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 2 !=3 END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''!='' at "!=3"', 1) lines =<< trim END echo 2!= 3 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) for op in ['==', '>', '>=', '<', '<=', '=~', '!~', 'is', 'isnot'] lines = ["echo 'aaa'", op .. "'bbb'", '# comment'] var msg = printf("E1004: White space required before and after '%s'", op) ! CheckDefAndScriptFailure(lines, msg, 2) endfor lines =<< trim END echo len('xxx') == 3 END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var line = 'abc' echo line[1] =~ '\w' END ! CheckDefAndScriptSuccess(lines) enddef func Test_expr4_fails() let msg = "White space required before and after '>'" ! call CheckDefAndScriptFailure(["var x = 1>2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 >2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1> 2"], msg, 1) let msg = "White space required before and after '=='" ! call CheckDefAndScriptFailure(["var x = 1==2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 ==2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1== 2"], msg, 1) let msg = "White space required before and after 'is'" ! call CheckDefAndScriptFailure(["var x = '1'is'2'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = '1' is'2'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = '1'is '2'"], msg, 1) let msg = "White space required before and after 'isnot'" ! call CheckDefAndScriptFailure(["var x = '1'isnot'2'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = '1' isnot'2'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = '1'isnot '2'"], msg, 1) ! ! call CheckDefAndScriptFailure(["var x = 1 is# 2"], 'E15:', 1) ! call CheckDefAndScriptFailure(["var x = 1 is? 2"], 'E15:', 1) ! call CheckDefAndScriptFailure(["var x = 1 isnot# 2"], 'E15:', 1) ! call CheckDefAndScriptFailure(["var x = 1 isnot? 2"], 'E15:', 1) ! ! call CheckDefAndScriptFailure(["var x = 1 == '2'"], 'Cannot compare number with string', 1) ! call CheckDefAndScriptFailure(["var x = '1' == 2"], 'Cannot compare string with number', 1) ! call CheckDefAndScriptFailure(["var x = 1 == RetVoid()"], 'Cannot compare number with void', 1) ! call CheckDefAndScriptFailure(["var x = RetVoid() == 1"], 'Cannot compare void with number', 1) ! ! call CheckDefAndScriptFailure(["var x = true > false"], 'Cannot compare bool with bool', 1) ! call CheckDefAndScriptFailure(["var x = true >= false"], 'Cannot compare bool with bool', 1) ! call CheckDefAndScriptFailure(["var x = true < false"], 'Cannot compare bool with bool', 1) ! call CheckDefAndScriptFailure(["var x = true <= false"], 'Cannot compare bool with bool', 1) ! call CheckDefAndScriptFailure(["var x = true =~ false"], 'Cannot compare bool with bool', 1) ! call CheckDefAndScriptFailure(["var x = true !~ false"], 'Cannot compare bool with bool', 1) ! call CheckDefAndScriptFailure(["var x = true is false"], 'Cannot use "is" with bool', 1) ! call CheckDefAndScriptFailure(["var x = true isnot false"], 'Cannot use "isnot" with bool', 1) ! ! call CheckDefAndScriptFailure(["var x = v:none is v:null"], 'Cannot use "is" with special', 1) ! call CheckDefAndScriptFailure(["var x = v:none isnot v:null"], 'Cannot use "isnot" with special', 1) ! call CheckDefAndScriptFailure(["var x = 123 is 123"], 'Cannot use "is" with number', 1) ! call CheckDefAndScriptFailure(["var x = 123 isnot 123"], 'Cannot use "isnot" with number', 1) if has('float') ! call CheckDefAndScriptFailure(["var x = 1.3 is 1.3"], 'Cannot use "is" with float', 1) ! call CheckDefAndScriptFailure(["var x = 1.3 isnot 1.3"], 'Cannot use "isnot" with float', 1) endif ! call CheckDefAndScriptFailure(["var x = 0za1 > 0z34"], 'Cannot compare blob with blob', 1) ! call CheckDefAndScriptFailure(["var x = 0za1 >= 0z34"], 'Cannot compare blob with blob', 1) ! call CheckDefAndScriptFailure(["var x = 0za1 < 0z34"], 'Cannot compare blob with blob', 1) ! call CheckDefAndScriptFailure(["var x = 0za1 <= 0z34"], 'Cannot compare blob with blob', 1) ! call CheckDefAndScriptFailure(["var x = 0za1 =~ 0z34"], 'Cannot compare blob with blob', 1) ! call CheckDefAndScriptFailure(["var x = 0za1 !~ 0z34"], 'Cannot compare blob with blob', 1) ! ! call CheckDefAndScriptFailure(["var x = [13] > [88]"], 'Cannot compare list with list', 1) ! call CheckDefAndScriptFailure(["var x = [13] >= [88]"], 'Cannot compare list with list', 1) ! call CheckDefAndScriptFailure(["var x = [13] < [88]"], 'Cannot compare list with list', 1) ! call CheckDefAndScriptFailure(["var x = [13] <= [88]"], 'Cannot compare list with list', 1) ! call CheckDefAndScriptFailure(["var x = [13] =~ [88]"], 'Cannot compare list with list', 1) ! call CheckDefAndScriptFailure(["var x = [13] !~ [88]"], 'Cannot compare list with list', 1) ! ! call CheckDefAndScriptFailure(['var j: job', 'var chan: channel', 'var r = j == chan'], 'Cannot compare job with channel', 3) ! call CheckDefAndScriptFailure(['var j: job', 'var x: list', 'var r = j == x'], 'Cannot compare job with list', 3) ! call CheckDefAndScriptFailure(['var j: job', 'var Xx: func', 'var r = j == Xx'], 'Cannot compare job with func', 3) ! call CheckDefAndScriptFailure(['var j: job', 'var Xx: func', 'var r = j == Xx'], 'Cannot compare job with func', 3) endfunc " test addition, subtraction, concatenation --- 1033,1172 ---- isnot 0z11 assert_equal(true, name) END ! v9.CheckDefAndScriptSuccess(lines) # spot check mismatching types lines =<< trim END echo '' == 0 END ! v9.CheckDefAndScriptFailure(lines, 'E1072:', 1) lines =<< trim END echo v:true > v:false END ! v9.CheckDefAndScriptFailure(lines, 'Cannot compare bool with bool', 1) lines =<< trim END echo 123 is 123 END ! v9.CheckDefAndScriptFailure(lines, 'Cannot use "is" with number', 1) # check missing white space lines =<< trim END echo 2>3 END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''>'' at ">3"', 1) lines =<< trim END echo 2 >3 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 2> 3 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 2!=3 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 2 !=3 END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''!='' at "!=3"', 1) lines =<< trim END echo 2!= 3 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) for op in ['==', '>', '>=', '<', '<=', '=~', '!~', 'is', 'isnot'] lines = ["echo 'aaa'", op .. "'bbb'", '# comment'] var msg = printf("E1004: White space required before and after '%s'", op) ! v9.CheckDefAndScriptFailure(lines, msg, 2) endfor lines =<< trim END echo len('xxx') == 3 END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var line = 'abc' echo line[1] =~ '\w' END ! v9.CheckDefAndScriptSuccess(lines) enddef func Test_expr4_fails() let msg = "White space required before and after '>'" ! call v9.CheckDefAndScriptFailure(["var x = 1>2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 >2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1> 2"], msg, 1) let msg = "White space required before and after '=='" ! call v9.CheckDefAndScriptFailure(["var x = 1==2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 ==2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1== 2"], msg, 1) let msg = "White space required before and after 'is'" ! call v9.CheckDefAndScriptFailure(["var x = '1'is'2'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = '1' is'2'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = '1'is '2'"], msg, 1) let msg = "White space required before and after 'isnot'" ! call v9.CheckDefAndScriptFailure(["var x = '1'isnot'2'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = '1' isnot'2'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = '1'isnot '2'"], msg, 1) ! ! call v9.CheckDefAndScriptFailure(["var x = 1 is# 2"], 'E15:', 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 is? 2"], 'E15:', 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 isnot# 2"], 'E15:', 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 isnot? 2"], 'E15:', 1) ! ! call v9.CheckDefAndScriptFailure(["var x = 1 == '2'"], 'Cannot compare number with string', 1) ! call v9.CheckDefAndScriptFailure(["var x = '1' == 2"], 'Cannot compare string with number', 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 == g:RetVoid()"], 'Cannot compare number with void', 1) ! call v9.CheckDefAndScriptFailure(["var x = g:RetVoid() == 1"], 'Cannot compare void with number', 1) ! ! call v9.CheckDefAndScriptFailure(["var x = true > false"], 'Cannot compare bool with bool', 1) ! call v9.CheckDefAndScriptFailure(["var x = true >= false"], 'Cannot compare bool with bool', 1) ! call v9.CheckDefAndScriptFailure(["var x = true < false"], 'Cannot compare bool with bool', 1) ! call v9.CheckDefAndScriptFailure(["var x = true <= false"], 'Cannot compare bool with bool', 1) ! call v9.CheckDefAndScriptFailure(["var x = true =~ false"], 'Cannot compare bool with bool', 1) ! call v9.CheckDefAndScriptFailure(["var x = true !~ false"], 'Cannot compare bool with bool', 1) ! call v9.CheckDefAndScriptFailure(["var x = true is false"], 'Cannot use "is" with bool', 1) ! call v9.CheckDefAndScriptFailure(["var x = true isnot false"], 'Cannot use "isnot" with bool', 1) ! ! call v9.CheckDefAndScriptFailure(["var x = v:none is v:null"], 'Cannot use "is" with special', 1) ! call v9.CheckDefAndScriptFailure(["var x = v:none isnot v:null"], 'Cannot use "isnot" with special', 1) ! call v9.CheckDefAndScriptFailure(["var x = 123 is 123"], 'Cannot use "is" with number', 1) ! call v9.CheckDefAndScriptFailure(["var x = 123 isnot 123"], 'Cannot use "isnot" with number', 1) if has('float') ! call v9.CheckDefAndScriptFailure(["var x = 1.3 is 1.3"], 'Cannot use "is" with float', 1) ! call v9.CheckDefAndScriptFailure(["var x = 1.3 isnot 1.3"], 'Cannot use "isnot" with float', 1) endif ! call v9.CheckDefAndScriptFailure(["var x = 0za1 > 0z34"], 'Cannot compare blob with blob', 1) ! call v9.CheckDefAndScriptFailure(["var x = 0za1 >= 0z34"], 'Cannot compare blob with blob', 1) ! call v9.CheckDefAndScriptFailure(["var x = 0za1 < 0z34"], 'Cannot compare blob with blob', 1) ! call v9.CheckDefAndScriptFailure(["var x = 0za1 <= 0z34"], 'Cannot compare blob with blob', 1) ! call v9.CheckDefAndScriptFailure(["var x = 0za1 =~ 0z34"], 'Cannot compare blob with blob', 1) ! call v9.CheckDefAndScriptFailure(["var x = 0za1 !~ 0z34"], 'Cannot compare blob with blob', 1) ! ! call v9.CheckDefAndScriptFailure(["var x = [13] > [88]"], 'Cannot compare list with list', 1) ! call v9.CheckDefAndScriptFailure(["var x = [13] >= [88]"], 'Cannot compare list with list', 1) ! call v9.CheckDefAndScriptFailure(["var x = [13] < [88]"], 'Cannot compare list with list', 1) ! call v9.CheckDefAndScriptFailure(["var x = [13] <= [88]"], 'Cannot compare list with list', 1) ! call v9.CheckDefAndScriptFailure(["var x = [13] =~ [88]"], 'Cannot compare list with list', 1) ! call v9.CheckDefAndScriptFailure(["var x = [13] !~ [88]"], 'Cannot compare list with list', 1) ! ! call v9.CheckDefAndScriptFailure(['var j: job', 'var chan: channel', 'var r = j == chan'], 'Cannot compare job with channel', 3) ! call v9.CheckDefAndScriptFailure(['var j: job', 'var x: list', 'var r = j == x'], 'Cannot compare job with list', 3) ! call v9.CheckDefAndScriptFailure(['var j: job', 'var Xx: func', 'var r = j == Xx'], 'Cannot compare job with func', 3) ! call v9.CheckDefAndScriptFailure(['var j: job', 'var Xx: func', 'var r = j == Xx'], 'Cannot compare job with func', 3) endfunc " test addition, subtraction, concatenation *************** *** 1232,1238 **** assert_equal('val', '' .. {key: 'val'}['key']) END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr5_vim9script() --- 1232,1238 ---- assert_equal('val', '' .. {key: 'val'}['key']) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr5_vim9script() *************** *** 1243,1249 **** - 22 assert_equal(66, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 11 + --- 1243,1249 ---- - 22 assert_equal(66, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 11 + *************** *** 1251,1257 **** 22 assert_equal(66, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 11 + # comment --- 1251,1257 ---- 22 assert_equal(66, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 11 + # comment *************** *** 1260,1371 **** 22 assert_equal(66, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 'one' .. 'two' assert_equal('onetwo', name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END echo 'abc' is# 'abc' END ! CheckDefAndScriptFailure(lines, 'E15:', 1) lines =<< trim END echo {} - 22 END ! CheckDefAndScriptFailure(lines, ['E1036:', 'E728:'], 1) lines =<< trim END echo [] - 33 END ! CheckDefAndScriptFailure(lines, ['E1036:', 'E745:'], 1) lines =<< trim END echo 0z1234 - 44 END ! CheckDefAndScriptFailure(lines, ['E1036', 'E974:'], 1) lines =<< trim END echo 'abc' is? 'abc' END ! CheckDefAndScriptFailure(lines, 'E15:', 1) lines =<< trim END echo 'abc' isnot# 'abc' END ! CheckDefAndScriptFailure(lines, 'E15:', 1) lines =<< trim END echo 'abc' isnot? 'abc' END ! CheckDefAndScriptFailure(lines, 'E15:', 1) # check white space lines =<< trim END echo 5+6 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 5 +6 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 5+ 6 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 'a'..'b' END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''..'' at "..''b''"', 1) lines =<< trim END echo 'a' ..'b' END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 'a'.. 'b' END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''..'' at ".. ''b''"', 1) lines =<< trim END echo 'a' ..'b' # comment END ! CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''..'' at "..''b''"', 2) # check invalid string concatenation lines =<< trim END echo 'a' .. [1] END ! CheckDefAndScriptFailure(lines, ['E1105:', 'E730:'], 1) lines =<< trim END echo 'a' .. {a: 1} END ! CheckDefAndScriptFailure(lines, ['E1105:', 'E731:'], 1) lines =<< trim END echo 'a' .. test_void() END ! CheckDefAndScriptFailure(lines, ['E1105:', 'E908:'], 1) lines =<< trim END echo 'a' .. 0z33 END ! CheckDefAndScriptFailure(lines, ['E1105:', 'E976:'], 1) lines =<< trim END echo 'a' .. function('len') END ! CheckDefAndScriptFailure(lines, ['E1105:', 'E729:'], 1) lines =<< trim END new --- 1260,1371 ---- 22 assert_equal(66, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 'one' .. 'two' assert_equal('onetwo', name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END echo 'abc' is# 'abc' END ! v9.CheckDefAndScriptFailure(lines, 'E15:', 1) lines =<< trim END echo {} - 22 END ! v9.CheckDefAndScriptFailure(lines, ['E1036:', 'E728:'], 1) lines =<< trim END echo [] - 33 END ! v9.CheckDefAndScriptFailure(lines, ['E1036:', 'E745:'], 1) lines =<< trim END echo 0z1234 - 44 END ! v9.CheckDefAndScriptFailure(lines, ['E1036', 'E974:'], 1) lines =<< trim END echo 'abc' is? 'abc' END ! v9.CheckDefAndScriptFailure(lines, 'E15:', 1) lines =<< trim END echo 'abc' isnot# 'abc' END ! v9.CheckDefAndScriptFailure(lines, 'E15:', 1) lines =<< trim END echo 'abc' isnot? 'abc' END ! v9.CheckDefAndScriptFailure(lines, 'E15:', 1) # check white space lines =<< trim END echo 5+6 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 5 +6 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 5+ 6 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 'a'..'b' END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''..'' at "..''b''"', 1) lines =<< trim END echo 'a' ..'b' END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 'a'.. 'b' END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''..'' at ".. ''b''"', 1) lines =<< trim END echo 'a' ..'b' # comment END ! v9.CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''..'' at "..''b''"', 2) # check invalid string concatenation lines =<< trim END echo 'a' .. [1] END ! v9.CheckDefAndScriptFailure(lines, ['E1105:', 'E730:'], 1) lines =<< trim END echo 'a' .. {a: 1} END ! v9.CheckDefAndScriptFailure(lines, ['E1105:', 'E731:'], 1) lines =<< trim END echo 'a' .. test_void() END ! v9.CheckDefAndScriptFailure(lines, ['E1105:', 'E908:'], 1) lines =<< trim END echo 'a' .. 0z33 END ! v9.CheckDefAndScriptFailure(lines, ['E1105:', 'E976:'], 1) lines =<< trim END echo 'a' .. function('len') END ! v9.CheckDefAndScriptFailure(lines, ['E1105:', 'E729:'], 1) lines =<< trim END new *************** *** 1375,1386 **** eval 0 bwipe! END ! CheckDefAndScriptFailure(lines, "E1004: White space required before and after '/' at \"/pattern", 3) for op in ['+', '-'] lines = ['var x = 1', op .. '2', '# comment'] var msg = printf("E1004: White space required before and after '%s' at \"%s2\"", op, op) ! CheckDefAndScriptFailure(lines, msg, 2) endfor enddef --- 1375,1386 ---- eval 0 bwipe! END ! v9.CheckDefAndScriptFailure(lines, "E1004: White space required before and after '/' at \"/pattern", 3) for op in ['+', '-'] lines = ['var x = 1', op .. '2', '# comment'] var msg = printf("E1004: White space required before and after '%s' at \"%s2\"", op, op) ! v9.CheckDefAndScriptFailure(lines, msg, 2) endfor enddef *************** *** 1391,1401 **** var lines =<< trim END echo 'a' .. test_null_job() END ! CheckDefAndScriptFailure(lines, ['E1105:', 'E908:'], 1) lines =<< trim END echo 'a' .. test_null_channel() END ! CheckDefAndScriptFailure(lines, ['E1105:', 'E908:'], 1) endif enddef --- 1391,1401 ---- var lines =<< trim END echo 'a' .. test_null_job() END ! v9.CheckDefAndScriptFailure(lines, ['E1105:', 'E908:'], 1) lines =<< trim END echo 'a' .. test_null_channel() END ! v9.CheckDefAndScriptFailure(lines, ['E1105:', 'E908:'], 1) endif enddef *************** *** 1423,1475 **** assert_equal(9.9, g:anint - g:afloat) assert_equal(-9.9, g:afloat - g:anint) END ! CheckDefAndScriptSuccess(lines) endif enddef func Test_expr5_fails() let msg = "White space required before and after '+'" ! call CheckDefAndScriptFailure(["var x = 1+2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 +2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1+ 2"], msg, 1) let msg = "White space required before and after '-'" ! call CheckDefAndScriptFailure(["var x = 1-2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 -2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1- 2"], msg, 1) let msg = "White space required before and after '..'" ! call CheckDefAndScriptFailure(["var x = '1'..'2'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = '1' ..'2'"], msg, 1) ! call CheckDefAndScriptFailure(["var x = '1'.. '2'"], msg, 1) ! ! call CheckDefAndScriptFailure(["var x = 0z1122 + 33"], ['E1051:', 'E974:'], 1) ! call CheckDefAndScriptFailure(["var x = 0z1122 + [3]"], ['E1051:', 'E974:'], 1) ! call CheckDefAndScriptFailure(["var x = 0z1122 + 'asd'"], ['E1051:', 'E974:'], 1) ! call CheckDefAndScriptFailure(["var x = 33 + 0z1122"], ['E1051:', 'E974:'], 1) ! call CheckDefAndScriptFailure(["var x = [3] + 0z1122"], ['E1051:', 'E745:'], 1) ! call CheckDefAndScriptFailure(["var x = 'asdf' + 0z1122"], ['E1051:', 'E1030:'], 1) ! call CheckDefAndScriptFailure(["var x = 6 + xxx"], ['E1001:', 'E121:'], 1) ! ! call CheckDefAndScriptFailure(["var x = 'a' .. [1]"], ['E1105:', 'E730:'], 1) ! call CheckDefAndScriptFailure(["var x = 'a' .. {a: 1}"], ['E1105:', 'E731:'], 1) ! call CheckDefAndScriptFailure(["var x = 'a' .. test_void()"], ['E1105:', 'E908:'], 1) ! call CheckDefAndScriptFailure(["var x = 'a' .. 0z32"], ['E1105:', 'E976:'], 1) ! call CheckDefAndScriptFailure(["var x = 'a' .. function('len')"], ['E1105:', 'E729:'], 1) ! call CheckDefAndScriptFailure(["var x = 'a' .. function('len', ['a'])"], ['E1105:', 'E729:'], 1) ! ! call CheckDefAndScriptFailure(['var x = 1 + v:none'], ['E1051:', 'E611:'], 1) ! call CheckDefAndScriptFailure(['var x = 1 + v:null'], ['E1051:', 'E611:'], 1) ! call CheckDefAndScriptFailure(['var x = 1 + v:true'], ['E1051:', 'E1138:'], 1) ! call CheckDefAndScriptFailure(['var x = 1 + v:false'], ['E1051:', 'E1138:'], 1) ! call CheckDefAndScriptFailure(['var x = 1 + true'], ['E1051:', 'E1138:'], 1) ! call CheckDefAndScriptFailure(['var x = 1 + false'], ['E1051:', 'E1138:'], 1) endfunc func Test_expr5_fails_channel() ! CheckFeature channel ! call CheckDefAndScriptFailure(["var x = 'a' .. test_null_job()"], ['E1105:', 'E908:'], 1) ! call CheckDefAndScriptFailure(["var x = 'a' .. test_null_channel()"], ['E1105:', 'E908:'], 1) endfunc def Test_expr5_list_add() --- 1423,1475 ---- assert_equal(9.9, g:anint - g:afloat) assert_equal(-9.9, g:afloat - g:anint) END ! v9.CheckDefAndScriptSuccess(lines) endif enddef func Test_expr5_fails() let msg = "White space required before and after '+'" ! call v9.CheckDefAndScriptFailure(["var x = 1+2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 +2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1+ 2"], msg, 1) let msg = "White space required before and after '-'" ! call v9.CheckDefAndScriptFailure(["var x = 1-2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 -2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1- 2"], msg, 1) let msg = "White space required before and after '..'" ! call v9.CheckDefAndScriptFailure(["var x = '1'..'2'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = '1' ..'2'"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = '1'.. '2'"], msg, 1) ! ! call v9.CheckDefAndScriptFailure(["var x = 0z1122 + 33"], ['E1051:', 'E974:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 0z1122 + [3]"], ['E1051:', 'E974:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 0z1122 + 'asd'"], ['E1051:', 'E974:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 33 + 0z1122"], ['E1051:', 'E974:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = [3] + 0z1122"], ['E1051:', 'E745:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 'asdf' + 0z1122"], ['E1051:', 'E1030:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 6 + xxx"], ['E1001:', 'E121:'], 1) ! ! call v9.CheckDefAndScriptFailure(["var x = 'a' .. [1]"], ['E1105:', 'E730:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 'a' .. {a: 1}"], ['E1105:', 'E731:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 'a' .. test_void()"], ['E1105:', 'E908:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 'a' .. 0z32"], ['E1105:', 'E976:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 'a' .. function('len')"], ['E1105:', 'E729:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 'a' .. function('len', ['a'])"], ['E1105:', 'E729:'], 1) ! ! call v9.CheckDefAndScriptFailure(['var x = 1 + v:none'], ['E1051:', 'E611:'], 1) ! call v9.CheckDefAndScriptFailure(['var x = 1 + v:null'], ['E1051:', 'E611:'], 1) ! call v9.CheckDefAndScriptFailure(['var x = 1 + v:true'], ['E1051:', 'E1138:'], 1) ! call v9.CheckDefAndScriptFailure(['var x = 1 + v:false'], ['E1051:', 'E1138:'], 1) ! call v9.CheckDefAndScriptFailure(['var x = 1 + true'], ['E1051:', 'E1138:'], 1) ! call v9.CheckDefAndScriptFailure(['var x = 1 + false'], ['E1051:', 'E1138:'], 1) endfunc func Test_expr5_fails_channel() ! g:CheckFeature channel ! call v9.CheckDefAndScriptFailure(["var x = 'a' .. test_null_job()"], ['E1105:', 'E908:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 'a' .. test_null_channel()"], ['E1105:', 'E908:'], 1) endfunc def Test_expr5_list_add() *************** *** 1490,1496 **** # result of glob() is "any", runtime type check var sl: list = glob('*.txt', false, true) + [''] END ! CheckDefAndScriptSuccess(lines) enddef " test multiply, divide, modulo --- 1490,1496 ---- # result of glob() is "any", runtime type check var sl: list = glob('*.txt', false, true) + [''] END ! v9.CheckDefAndScriptSuccess(lines) enddef " test multiply, divide, modulo *************** *** 1532,1557 **** * yf[0]) endif END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(["var x = 6 * xxx"], ['E1001:', 'E121:'], 1) ! CheckDefFailure(["var d = 6 * "], 'E1097:', 3) ! CheckScriptFailure(['vim9script', "var d = 6 * "], 'E15:', 2) ! CheckDefExecAndScriptFailure(['echo 1 / 0'], 'E1154', 1) ! CheckDefExecAndScriptFailure(['echo 1 % 0'], 'E1154', 1) lines =<< trim END var n = 0 eval 1 / n END ! CheckDefExecAndScriptFailure(lines, 'E1154', 2) lines =<< trim END var n = 0 eval 1 % n END ! CheckDefExecAndScriptFailure(lines, 'E1154', 2) enddef def Test_expr6_vim9script() --- 1532,1557 ---- * yf[0]) endif END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(["var x = 6 * xxx"], ['E1001:', 'E121:'], 1) ! v9.CheckDefFailure(["var d = 6 * "], 'E1097:', 3) ! v9.CheckScriptFailure(['vim9script', "var d = 6 * "], 'E15:', 2) ! v9.CheckDefExecAndScriptFailure(['echo 1 / 0'], 'E1154', 1) ! v9.CheckDefExecAndScriptFailure(['echo 1 % 0'], 'E1154', 1) lines =<< trim END var n = 0 eval 1 / n END ! v9.CheckDefExecAndScriptFailure(lines, 'E1154', 2) lines =<< trim END var n = 0 eval 1 % n END ! v9.CheckDefExecAndScriptFailure(lines, 'E1154', 2) enddef def Test_expr6_vim9script() *************** *** 1562,1575 **** / 3 assert_equal(80, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 25 % 10 assert_equal(5, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 25 --- 1562,1575 ---- / 3 assert_equal(80, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 25 % 10 assert_equal(5, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 25 *************** *** 1579,1585 **** % 10 assert_equal(5, name) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 11 * --- 1579,1585 ---- % 10 assert_equal(5, name) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var name = 11 * *************** *** 1587,1609 **** 3 assert_equal(80, name) END ! CheckDefAndScriptSuccess(lines) # check white space lines =<< trim END echo 5*6 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 5 *6 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 5* 6 END ! CheckDefAndScriptFailure(lines, 'E1004:', 1) enddef def Test_expr6_float() --- 1587,1609 ---- 3 assert_equal(80, name) END ! v9.CheckDefAndScriptSuccess(lines) # check white space lines =<< trim END echo 5*6 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 5 *6 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) lines =<< trim END echo 5* 6 END ! v9.CheckDefAndScriptFailure(lines, 'E1004:', 1) enddef def Test_expr6_float() *************** *** 1635,1691 **** assert_equal(4.0, 6.0 * 4.0 / 6.0) END ! CheckDefAndScriptSuccess(lines) endif enddef func Test_expr6_fails() let msg = "White space required before and after '*'" ! call CheckDefAndScriptFailure(["var x = 1*2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 *2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1* 2"], msg, 1) let msg = "White space required before and after '/'" ! call CheckDefAndScriptFailure(["var x = 1/2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 /2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1/ 2"], msg, 1) let msg = "White space required before and after '%'" ! call CheckDefAndScriptFailure(["var x = 1%2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1 %2"], msg, 1) ! call CheckDefAndScriptFailure(["var x = 1% 2"], msg, 1) ! ! call CheckDefAndScriptFailure(["var x = '1' * '2'"], ['E1036:', 'E1030:'], 1) ! call CheckDefAndScriptFailure(["var x = '1' / '2'"], ['E1036:', 'E1030:'], 1) ! call CheckDefAndScriptFailure(["var x = '1' % '2'"], ['E1035:', 'E1030:'], 1) ! ! call CheckDefAndScriptFailure(["var x = 0z01 * 0z12"], ['E1036:', 'E974:'], 1) ! call CheckDefAndScriptFailure(["var x = 0z01 / 0z12"], ['E1036:', 'E974:'], 1) ! call CheckDefAndScriptFailure(["var x = 0z01 % 0z12"], ['E1035:', 'E974:'], 1) ! ! call CheckDefAndScriptFailure(["var x = [1] * [2]"], ['E1036:', 'E745:'], 1) ! call CheckDefAndScriptFailure(["var x = [1] / [2]"], ['E1036:', 'E745:'], 1) ! call CheckDefAndScriptFailure(["var x = [1] % [2]"], ['E1035:', 'E745:'], 1) ! ! call CheckDefAndScriptFailure(["var x = {one: 1} * {two: 2}"], ['E1036:', 'E728:'], 1) ! call CheckDefAndScriptFailure(["var x = {one: 1} / {two: 2}"], ['E1036:', 'E728:'], 1) ! call CheckDefAndScriptFailure(["var x = {one: 1} % {two: 2}"], ['E1035:', 'E728:'], 1) ! call CheckDefAndScriptFailure(["var x = 0xff[1]"], ['E1107:', 'E1062:'], 1) if has('float') ! call CheckDefAndScriptFailure(["var x = 0.7[1]"], ['E1107:', 'E806:'], 1) endif for op in ['*', '/', '%'] let lines = ['var x = 1', op .. '2', '# comment'] let msg = printf("E1004: White space required before and after '%s' at \"%s2\"", op, op) ! call CheckDefAndScriptFailure(lines, msg, 2) endfor endfunc func Test_expr6_float_fails() ! CheckFeature float ! call CheckDefAndScriptFailure(["var x = 1.0 % 2"], ['E1035:', 'E804:'], 1) endfunc " define here to use old style parsing --- 1635,1691 ---- assert_equal(4.0, 6.0 * 4.0 / 6.0) END ! v9.CheckDefAndScriptSuccess(lines) endif enddef func Test_expr6_fails() let msg = "White space required before and after '*'" ! call v9.CheckDefAndScriptFailure(["var x = 1*2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 *2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1* 2"], msg, 1) let msg = "White space required before and after '/'" ! call v9.CheckDefAndScriptFailure(["var x = 1/2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 /2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1/ 2"], msg, 1) let msg = "White space required before and after '%'" ! call v9.CheckDefAndScriptFailure(["var x = 1%2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1 %2"], msg, 1) ! call v9.CheckDefAndScriptFailure(["var x = 1% 2"], msg, 1) ! ! call v9.CheckDefAndScriptFailure(["var x = '1' * '2'"], ['E1036:', 'E1030:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = '1' / '2'"], ['E1036:', 'E1030:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = '1' % '2'"], ['E1035:', 'E1030:'], 1) ! ! call v9.CheckDefAndScriptFailure(["var x = 0z01 * 0z12"], ['E1036:', 'E974:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 0z01 / 0z12"], ['E1036:', 'E974:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 0z01 % 0z12"], ['E1035:', 'E974:'], 1) ! ! call v9.CheckDefAndScriptFailure(["var x = [1] * [2]"], ['E1036:', 'E745:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = [1] / [2]"], ['E1036:', 'E745:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = [1] % [2]"], ['E1035:', 'E745:'], 1) ! ! call v9.CheckDefAndScriptFailure(["var x = {one: 1} * {two: 2}"], ['E1036:', 'E728:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = {one: 1} / {two: 2}"], ['E1036:', 'E728:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = {one: 1} % {two: 2}"], ['E1035:', 'E728:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = 0xff[1]"], ['E1107:', 'E1062:'], 1) if has('float') ! call v9.CheckDefAndScriptFailure(["var x = 0.7[1]"], ['E1107:', 'E806:'], 1) endif for op in ['*', '/', '%'] let lines = ['var x = 1', op .. '2', '# comment'] let msg = printf("E1004: White space required before and after '%s' at \"%s2\"", op, op) ! call v9.CheckDefAndScriptFailure(lines, msg, 2) endfor endfunc func Test_expr6_float_fails() ! g:CheckFeature float ! call v9.CheckDefAndScriptFailure(["var x = 1.0 % 2"], ['E1035:', 'E804:'], 1) endfunc " define here to use old style parsing *************** *** 1732,1745 **** text = 'xxx' endif END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(["var x = 123"], 'E1010:', 1) ! CheckDefFailure(["var x = "], 'E1097:', 3) ! CheckDefFailure(["var x = string(1)"], 'E1012:', 1) ! CheckScriptFailure(['vim9script', "var x = "], 'E15:', 2) ! CheckDefAndScriptFailure(["var x = 123"], 'E1068:', 1) ! CheckDefAndScriptFailure(["var x = 'xxx' endif END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(["var x = 123"], 'E1010:', 1) ! v9.CheckDefFailure(["var x = "], 'E1097:', 3) ! v9.CheckDefFailure(["var x = string(1)"], 'E1012:', 1) ! v9.CheckScriptFailure(['vim9script', "var x = "], 'E15:', 2) ! v9.CheckDefAndScriptFailure(["var x = 123"], 'E1068:', 1) ! v9.CheckDefAndScriptFailure(["var x = = v:errors ! CheckDefFailure(['var errs: list = v:errors'], 'E1012:') var old: list = v:oldfiles ! CheckDefFailure(['var old: list = v:oldfiles'], 'E1012:') var compl: dict = v:completed_item ! CheckDefFailure(['var compl: dict = v:completed_item'], 'E1012:') var args: list = v:argv ! CheckDefFailure(['var args: list = v:argv'], 'E1012:') var colors: dict = v:colornames ! CheckDefFailure(['var colors: dict = v:colornames'], 'E1012:') ! CheckDefFailure(["var old: list = v:oldfiles"], 'E1012: Type mismatch; expected list but got list', 1) ! CheckScriptFailure(['vim9script', 'v:oldfiles = ["foo"]', "var old: list = v:oldfiles"], 'E1012: Type mismatch; expected list but got list', 3) new exec "normal! afoo fo\\" ! CheckDefExecAndScriptFailure(["var old: dict = v:completed_item"], 'E1012: Type mismatch; expected dict but got dict', 1) bwipe! enddef --- 1814,1847 ---- assert_equal(g:string_long, "abcdefghijklm") assert_equal(g:string_special, "ab\ncd\ref\ekk") END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(['var x = "abc'], 'E114:', 1) ! v9.CheckDefAndScriptFailure(["var x = 'abc"], 'E115:', 1) enddef def Test_expr8_vimvar() v:errors = [] var errs: list = v:errors ! v9.CheckDefFailure(['var errs: list = v:errors'], 'E1012:') var old: list = v:oldfiles ! v9.CheckDefFailure(['var old: list = v:oldfiles'], 'E1012:') var compl: dict = v:completed_item ! v9.CheckDefFailure(['var compl: dict = v:completed_item'], 'E1012:') var args: list = v:argv ! v9.CheckDefFailure(['var args: list = v:argv'], 'E1012:') var colors: dict = v:colornames ! v9.CheckDefFailure(['var colors: dict = v:colornames'], 'E1012:') ! v9.CheckDefFailure(["var old: list = v:oldfiles"], 'E1012: Type mismatch; expected list but got list', 1) ! v9.CheckScriptFailure(['vim9script', 'v:oldfiles = ["foo"]', "var old: list = v:oldfiles"], 'E1012: Type mismatch; expected list but got list', 3) new exec "normal! afoo fo\\" ! v9.CheckDefExecAndScriptFailure(["var old: dict = v:completed_item"], 'E1012: Type mismatch; expected dict but got dict', 1) bwipe! enddef *************** *** 1873,1885 **** assert_equal(g:special_null, null) assert_equal(g:special_none, v:none) END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(['v:true = true'], 'E46:', 1) ! CheckDefAndScriptFailure(['v:true = false'], 'E46:', 1) ! CheckDefAndScriptFailure(['v:false = true'], 'E46:', 1) ! CheckDefAndScriptFailure(['v:null = 11'], 'E46:', 1) ! CheckDefAndScriptFailure(['v:none = 22'], 'E46:', 1) enddef def Test_expr8_list() --- 1873,1885 ---- assert_equal(g:special_null, null) assert_equal(g:special_none, v:none) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(['v:true = true'], 'E46:', 1) ! v9.CheckDefAndScriptFailure(['v:true = false'], 'E46:', 1) ! v9.CheckDefAndScriptFailure(['v:false = true'], 'E46:', 1) ! v9.CheckDefAndScriptFailure(['v:null = 11'], 'E46:', 1) ! v9.CheckDefAndScriptFailure(['v:none = 22'], 'E46:', 1) enddef def Test_expr8_list() *************** *** 1908,1939 **** llstring = [[], ['text']] llstring = [[], []] END ! CheckDefAndScriptSuccess(lines) var rangelist: list = range(3) g:rangelist = range(3) ! CheckDefExecAndScriptFailure(["var x: list = g:rangelist"], 'E1012: Type mismatch; expected list but got list', 1) ! CheckDefAndScriptFailure(["var x = 1234[3]"], ['E1107:', 'E1062:'], 1) ! CheckDefExecAndScriptFailure(["var x = g:anint[3]"], 'E1062:', 1) ! CheckDefAndScriptFailure(["var x = g:list_mixed[xxx]"], ['E1001:', 'E121:'], 1) ! CheckDefAndScriptFailure(["var x = [1,2,3]"], 'E1069:', 1) ! CheckDefAndScriptFailure(["var x = [1 ,2, 3]"], 'E1068:', 1) ! ! CheckDefExecAndScriptFailure(["echo 1", "var x = [][0]", "echo 3"], 'E684:', 2) ! ! CheckDefExecAndScriptFailure(["var x = g:list_mixed['xx']"], ['E1012:', 'E1030:'], 1) ! CheckDefFailure(["var x = g:list_mixed["], 'E1097:', 3) ! CheckScriptFailure(['vim9script', "var x = g:list_mixed["], 'E15:', 2) ! CheckDefFailure(["var x = g:list_mixed[0"], 'E1097:', 3) ! CheckScriptFailure(['vim9script', "var x = g:list_mixed[0"], 'E111:', 2) ! CheckDefExecAndScriptFailure(["var x = g:list_empty[3]"], 'E684:', 1) ! CheckDefExecAndScriptFailure(["var l: list = [234, 'x']"], 'E1012:', 1) ! CheckDefExecAndScriptFailure(["var l: list = ['x', 234]"], 'E1012:', 1) ! CheckDefExecAndScriptFailure(["var l: list = [234, 'x']"], 'E1012:', 1) ! CheckDefExecAndScriptFailure(["var l: list = ['x', 123]"], 'E1012:', 1) lines =<< trim END var datalist: list --- 1908,1939 ---- llstring = [[], ['text']] llstring = [[], []] END ! v9.CheckDefAndScriptSuccess(lines) var rangelist: list = range(3) g:rangelist = range(3) ! v9.CheckDefExecAndScriptFailure(["var x: list = g:rangelist"], 'E1012: Type mismatch; expected list but got list', 1) ! v9.CheckDefAndScriptFailure(["var x = 1234[3]"], ['E1107:', 'E1062:'], 1) ! v9.CheckDefExecAndScriptFailure(["var x = g:anint[3]"], 'E1062:', 1) ! v9.CheckDefAndScriptFailure(["var x = g:list_mixed[xxx]"], ['E1001:', 'E121:'], 1) ! v9.CheckDefAndScriptFailure(["var x = [1,2,3]"], 'E1069:', 1) ! v9.CheckDefAndScriptFailure(["var x = [1 ,2, 3]"], 'E1068:', 1) ! ! v9.CheckDefExecAndScriptFailure(["echo 1", "var x = [][0]", "echo 3"], 'E684:', 2) ! ! v9.CheckDefExecAndScriptFailure(["var x = g:list_mixed['xx']"], ['E1012:', 'E1030:'], 1) ! v9.CheckDefFailure(["var x = g:list_mixed["], 'E1097:', 3) ! v9.CheckScriptFailure(['vim9script', "var x = g:list_mixed["], 'E15:', 2) ! v9.CheckDefFailure(["var x = g:list_mixed[0"], 'E1097:', 3) ! v9.CheckScriptFailure(['vim9script', "var x = g:list_mixed[0"], 'E111:', 2) ! v9.CheckDefExecAndScriptFailure(["var x = g:list_empty[3]"], 'E684:', 1) ! v9.CheckDefExecAndScriptFailure(["var l: list = [234, 'x']"], 'E1012:', 1) ! v9.CheckDefExecAndScriptFailure(["var l: list = ['x', 234]"], 'E1012:', 1) ! v9.CheckDefExecAndScriptFailure(["var l: list = [234, 'x']"], 'E1012:', 1) ! v9.CheckDefExecAndScriptFailure(["var l: list = ['x', 123]"], 'E1012:', 1) lines =<< trim END var datalist: list *************** *** 1942,1958 **** enddef Main() END ! CheckDefAndScriptFailure(lines, 'E1127:') lines =<< trim END var numbers = [1, 2, 3, 4] var a = 1 var b = 2 END ! CheckDefAndScriptFailure(lines + ['echo numbers[1:b]'], 'E1004: White space required before and after '':'' at ":b]"', 4) ! CheckDefAndScriptFailure(lines + ['echo numbers[1: b]'], 'E1004:', 4) ! CheckDefAndScriptFailure(lines + ['echo numbers[a :b]'], 'E1004:', 4) enddef def Test_expr8_list_vim9script() --- 1942,1958 ---- enddef Main() END ! v9.CheckDefAndScriptFailure(lines, 'E1127:') lines =<< trim END var numbers = [1, 2, 3, 4] var a = 1 var b = 2 END ! v9.CheckDefAndScriptFailure(lines + ['echo numbers[1:b]'], 'E1004: White space required before and after '':'' at ":b]"', 4) ! v9.CheckDefAndScriptFailure(lines + ['echo numbers[1: b]'], 'E1004:', 4) ! v9.CheckDefAndScriptFailure(lines + ['echo numbers[a :b]'], 'E1004:', 4) enddef def Test_expr8_list_vim9script() *************** *** 1973,2016 **** # comment 4] END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var l = [11, 22] assert_equal([11, 22], l) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var l = [11,22] END ! CheckDefAndScriptFailure(lines, 'E1069:', 1) lines =<< trim END var l = [11 , 22] END ! CheckDefAndScriptFailure(lines, 'E1068:', 1) lines =<< trim END var l: list = [234, 'x'] END ! CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: list = ['x', 234] END ! CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: list = ['x', 234] END ! CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: list = [234, 'x'] END ! CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END def Failing() --- 1973,2016 ---- # comment 4] END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var l = [11, 22] assert_equal([11, 22], l) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var l = [11,22] END ! v9.CheckDefAndScriptFailure(lines, 'E1069:', 1) lines =<< trim END var l = [11 , 22] END ! v9.CheckDefAndScriptFailure(lines, 'E1068:', 1) lines =<< trim END var l: list = [234, 'x'] END ! v9.CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: list = ['x', 234] END ! v9.CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: list = ['x', 234] END ! v9.CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: list = [234, 'x'] END ! v9.CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END def Failing() *************** *** 2019,2027 **** var list = [Failing] END if has('channel') ! CheckDefAndScriptFailure(lines, 'E119:', 0) else ! CheckDefAndScriptFailure(lines, 'E117:', 0) endif enddef --- 2019,2027 ---- var list = [Failing] END if has('channel') ! v9.CheckDefAndScriptFailure(lines, 'E119:', 0) else ! v9.CheckDefAndScriptFailure(lines, 'E117:', 0) endif enddef *************** *** 2084,2132 **** assert_equal([{key: 12}], filter(dl, (_, v) => has_key(v, 'key') ? v['key'] == 12 : 0)) ! assert_equal(false, LambdaWithComments()(0)) ! assert_equal(true, LambdaWithComments()(1)) ! assert_equal(true, LambdaWithComments()(2)) ! assert_equal(false, LambdaWithComments()(3)) ! assert_equal(false, LambdaUsingArg(0)()) ! assert_equal(true, LambdaUsingArg(1)()) var res = map([1, 2, 3], (i: number, v: number) => i + v) assert_equal([1, 3, 5], res) END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(["var Ref = (a)=>a + 1"], 'E1004:') ! CheckDefAndScriptFailure(["var Ref = (a)=> a + 1"], 'E1004: White space required before and after ''=>'' at "=> a + 1"') ! CheckDefAndScriptFailure(["var Ref = (a) =>a + 1"], 'E1004:') ! CheckDefAndScriptFailure(["var Ref = (a) =< a + 1"], ['E1001:', 'E121:']) ! CheckDefAndScriptFailure(["var Ref = (a: int) => a + 1"], 'E1010:') ! CheckDefAndScriptFailure(["var Ref = (a): int => a + 1"], 'E1010:') ! CheckDefAndScriptFailure(["filter([1, 2], (k,v) => 1)"], 'E1069:', 1) # error is in first line of the lambda ! CheckDefAndScriptFailure(["var L = (a) => a + b"], 'E1001:', 0) assert_equal('xxxyyy', 'xxx'->((a, b) => a .. b)('yyy')) ! CheckDefExecFailure(["var s = 'asdf'->((a) => a)('x')"], 'E118:') ! CheckDefExecFailure(["var s = 'asdf'->((a) => a)('x', 'y')"], 'E118:') ! CheckDefAndScriptFailure(["echo 'asdf'->((a) => a)(x)"], ['E1001:', 'E121:'], 1) ! ! CheckDefAndScriptSuccess(['var Fx = (a) => ({k1: 0,', ' k2: 1})']) ! CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0', ' k2: 1})'], 'E722:', 2) ! CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0,', ' k2 1})'], 'E720:', 2) ! CheckDefAndScriptSuccess(['var Fx = (a) => [0,', ' 1]']) ! CheckDefAndScriptFailure(['var Fx = (a) => [0', ' 1]'], 'E696:', 2) # no error for existing script variable when checking for lambda lines =<< trim END var name = 0 eval (name + 2) / 3 END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_lambda_block() --- 2084,2132 ---- assert_equal([{key: 12}], filter(dl, (_, v) => has_key(v, 'key') ? v['key'] == 12 : 0)) ! assert_equal(false, g:LambdaWithComments()(0)) ! assert_equal(true, g:LambdaWithComments()(1)) ! assert_equal(true, g:LambdaWithComments()(2)) ! assert_equal(false, g:LambdaWithComments()(3)) ! assert_equal(false, g:LambdaUsingArg(0)()) ! assert_equal(true, g:LambdaUsingArg(1)()) var res = map([1, 2, 3], (i: number, v: number) => i + v) assert_equal([1, 3, 5], res) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(["var Ref = (a)=>a + 1"], 'E1004:') ! v9.CheckDefAndScriptFailure(["var Ref = (a)=> a + 1"], 'E1004: White space required before and after ''=>'' at "=> a + 1"') ! v9.CheckDefAndScriptFailure(["var Ref = (a) =>a + 1"], 'E1004:') ! v9.CheckDefAndScriptFailure(["var Ref = (a) =< a + 1"], ['E1001:', 'E121:']) ! v9.CheckDefAndScriptFailure(["var Ref = (a: int) => a + 1"], 'E1010:') ! v9.CheckDefAndScriptFailure(["var Ref = (a): int => a + 1"], 'E1010:') ! v9.CheckDefAndScriptFailure(["filter([1, 2], (k,v) => 1)"], 'E1069:', 1) # error is in first line of the lambda ! v9.CheckDefAndScriptFailure(["var L = (a) => a + b"], 'E1001:', 0) assert_equal('xxxyyy', 'xxx'->((a, b) => a .. b)('yyy')) ! v9.CheckDefExecFailure(["var s = 'asdf'->((a) => a)('x')"], 'E118:') ! v9.CheckDefExecFailure(["var s = 'asdf'->((a) => a)('x', 'y')"], 'E118:') ! v9.CheckDefAndScriptFailure(["echo 'asdf'->((a) => a)(x)"], ['E1001:', 'E121:'], 1) ! ! v9.CheckDefAndScriptSuccess(['var Fx = (a) => ({k1: 0,', ' k2: 1})']) ! v9.CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0', ' k2: 1})'], 'E722:', 2) ! v9.CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0,', ' k2 1})'], 'E720:', 2) ! v9.CheckDefAndScriptSuccess(['var Fx = (a) => [0,', ' 1]']) ! v9.CheckDefAndScriptFailure(['var Fx = (a) => [0', ' 1]'], 'E696:', 2) # no error for existing script variable when checking for lambda lines =<< trim END var name = 0 eval (name + 2) / 3 END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_lambda_block() *************** *** 2154,2194 **** } assert_equal(10, Safe(3)) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END map([1, 2], (k, v) => { redrawt }) END ! CheckDefAndScriptFailure(lines, 'E488') lines =<< trim END var Func = (nr: int) => { echo nr } END ! CheckDefAndScriptFailure(lines, 'E1010', 1) lines =<< trim END var Func = (nr: number): int => { return nr } END ! CheckDefAndScriptFailure(lines, 'E1010', 1) lines =<< trim END var Func = (nr: number): int => { return nr END ! CheckDefFailure(lines, 'E1171', 0) # line nr is function start ! CheckScriptFailure(['vim9script'] + lines, 'E1171', 2) lines =<< trim END var Func = (nr: number): int => { var ll =<< ENDIT nothing END ! CheckDefFailure(lines, 'E1145: Missing heredoc end marker: ENDIT', 0) ! CheckScriptFailure(['vim9script'] + lines, 'E1145: Missing heredoc end marker: ENDIT', 2) enddef def NewLambdaWithComments(): func --- 2154,2194 ---- } assert_equal(10, Safe(3)) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END map([1, 2], (k, v) => { redrawt }) END ! v9.CheckDefAndScriptFailure(lines, 'E488') lines =<< trim END var Func = (nr: int) => { echo nr } END ! v9.CheckDefAndScriptFailure(lines, 'E1010', 1) lines =<< trim END var Func = (nr: number): int => { return nr } END ! v9.CheckDefAndScriptFailure(lines, 'E1010', 1) lines =<< trim END var Func = (nr: number): int => { return nr END ! v9.CheckDefFailure(lines, 'E1171', 0) # line nr is function start ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1171', 2) lines =<< trim END var Func = (nr: number): int => { var ll =<< ENDIT nothing END ! v9.CheckDefFailure(lines, 'E1145: Missing heredoc end marker: ENDIT', 0) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1145: Missing heredoc end marker: ENDIT', 2) enddef def NewLambdaWithComments(): func *************** *** 2243,2255 **** assert_equal([{key: 12}], filter(dl, (_, v) => has_key(v, 'key') ? v['key'] == 12 : 0)) ! assert_equal(false, NewLambdaWithComments()(0)) ! assert_equal(true, NewLambdaWithComments()(1)) ! assert_equal(true, NewLambdaWithComments()(2)) ! assert_equal(false, NewLambdaWithComments()(3)) ! assert_equal(false, NewLambdaUsingArg(0)()) ! assert_equal(true, NewLambdaUsingArg(1)()) var res = map([1, 2, 3], (i: number, v: number) => i + v) assert_equal([1, 3, 5], res) --- 2243,2255 ---- assert_equal([{key: 12}], filter(dl, (_, v) => has_key(v, 'key') ? v['key'] == 12 : 0)) ! assert_equal(false, g:NewLambdaWithComments()(0)) ! assert_equal(true, g:NewLambdaWithComments()(1)) ! assert_equal(true, g:NewLambdaWithComments()(2)) ! assert_equal(false, g:NewLambdaWithComments()(3)) ! assert_equal(false, g:NewLambdaUsingArg(0)()) ! assert_equal(true, g:NewLambdaUsingArg(1)()) var res = map([1, 2, 3], (i: number, v: number) => i + v) assert_equal([1, 3, 5], res) *************** *** 2266,2297 **** var Fy = (a) => [0, 1] END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(["var Ref = (a)=>a + 1"], 'E1004:') ! CheckDefAndScriptFailure(["var Ref = (a)=> a + 1"], 'E1004:') ! CheckDefAndScriptFailure(["var Ref = (a) =>a + 1"], 'E1004: White space required before and after ''=>'' at " =>a + 1"') ! CheckDefAndScriptFailure(["var Ref: func(number): number = (a: number): string => 'x'"], 'E1012:') ! CheckDefAndScriptFailure(["var Ref: func(number): string = (a: number): string => 99"], 'E1012:') ! CheckDefAndScriptFailure(["filter([1, 2], (k,v) => 1)"], 'E1069:', 1) # error is in first line of the lambda ! CheckDefAndScriptFailure(["var L = (a) -> a + b"], ['E1001:', 'E121:'], 1) assert_equal('xxxyyy', 'xxx'->((a, b) => a .. b)('yyy')) ! CheckDefExecFailure(["var s = 'asdf'->((a) => a)('x')"], 'E118: Too many arguments for function:') ! CheckDefExecFailure(["var s = 'asdf'->((a) => a)('x', 'y')"], 'E118: Too many arguments for function:') ! CheckDefFailure(["echo 'asdf'->((a) => a)(x)"], 'E1001:', 1) ! CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0', ' k2: 1})'], 'E722:', 2) ! CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0,', ' k2 1})'], 'E720:', 2) ! CheckDefAndScriptFailure(['var Fx = (a) => [0', ' 1]'], 'E696:', 2) enddef def Test_expr8_lambda_vim9script() --- 2266,2297 ---- var Fy = (a) => [0, 1] END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(["var Ref = (a)=>a + 1"], 'E1004:') ! v9.CheckDefAndScriptFailure(["var Ref = (a)=> a + 1"], 'E1004:') ! v9.CheckDefAndScriptFailure(["var Ref = (a) =>a + 1"], 'E1004: White space required before and after ''=>'' at " =>a + 1"') ! v9.CheckDefAndScriptFailure(["var Ref: func(number): number = (a: number): string => 'x'"], 'E1012:') ! v9.CheckDefAndScriptFailure(["var Ref: func(number): string = (a: number): string => 99"], 'E1012:') ! v9.CheckDefAndScriptFailure(["filter([1, 2], (k,v) => 1)"], 'E1069:', 1) # error is in first line of the lambda ! v9.CheckDefAndScriptFailure(["var L = (a) -> a + b"], ['E1001:', 'E121:'], 1) assert_equal('xxxyyy', 'xxx'->((a, b) => a .. b)('yyy')) ! v9.CheckDefExecFailure(["var s = 'asdf'->((a) => a)('x')"], 'E118: Too many arguments for function:') ! v9.CheckDefExecFailure(["var s = 'asdf'->((a) => a)('x', 'y')"], 'E118: Too many arguments for function:') ! v9.CheckDefFailure(["echo 'asdf'->((a) => a)(x)"], 'E1001:', 1) ! v9.CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0', ' k2: 1})'], 'E722:', 2) ! v9.CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0,', ' k2 1})'], 'E720:', 2) ! v9.CheckDefAndScriptFailure(['var Fx = (a) => [0', ' 1]'], 'E696:', 2) enddef def Test_expr8_lambda_vim9script() *************** *** 2302,2308 **** )() assert_equal(12, v) END ! CheckDefAndScriptSuccess(lines) # nested lambda with line breaks lines =<< trim END --- 2302,2308 ---- )() assert_equal(12, v) END ! v9.CheckDefAndScriptSuccess(lines) # nested lambda with line breaks lines =<< trim END *************** *** 2310,2316 **** synstack('.', col('.')) ->mapnew((_, v) => synIDattr(v, 'name'))->len()) END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_funcref() --- 2310,2316 ---- synstack('.', col('.')) ->mapnew((_, v) => synIDattr(v, 'name'))->len()) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_funcref() *************** *** 2321,2327 **** var FuncRef = RetNumber assert_equal(123, FuncRef()) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END vim9script --- 2321,2327 ---- var FuncRef = RetNumber assert_equal(123, FuncRef()) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END vim9script *************** *** 2344,2350 **** enddef Test() END ! CheckScriptSuccess(lines) enddef let g:test_space_dict = {'': 'empty', ' ': 'space'} --- 2344,2350 ---- enddef Test() END ! v9.CheckScriptSuccess(lines) enddef let g:test_space_dict = {'': 'empty', ' ': 'space'} *************** *** 2425,2464 **** var x1: number #{{ fold var x2 = 9 #{{ fold END ! CheckDefAndScriptSuccess(lines) # legacy syntax doesn't work ! CheckDefAndScriptFailure(["var x = #{key: 8}"], 'E1170:', 1) ! CheckDefAndScriptFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1) ! CheckDefAndScriptFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1) ! CheckDefAndScriptFailure(["var x = true ? #{a: 1}"], 'E1170:', 1) ! ! CheckDefAndScriptFailure(["var x = {a:8}"], 'E1069:', 1) ! CheckDefAndScriptFailure(["var x = {a : 8}"], 'E1068:', 1) ! CheckDefAndScriptFailure(["var x = {a :8}"], 'E1068:', 1) ! CheckDefAndScriptFailure(["var x = {a: 8 , b: 9}"], 'E1068:', 1) ! CheckDefAndScriptFailure(["var x = {a: 1,b: 2}"], 'E1069:', 1) ! ! CheckDefAndScriptFailure(["var x = {xxx}"], 'E720:', 1) ! CheckDefAndScriptFailure(["var x = {xxx: 1", "var y = 2"], 'E722:', 2) ! CheckDefFailure(["var x = {xxx: 1,"], 'E723:', 2) ! CheckScriptFailure(['vim9script', "var x = {xxx: 1,"], 'E723:', 2) ! CheckDefAndScriptFailure(["var x = {['a']: xxx}"], ['E1001:', 'E121:'], 1) ! CheckDefAndScriptFailure(["var x = {a: 1, a: 2}"], 'E721:', 1) ! CheckDefExecAndScriptFailure(["var x = g:anint.member"], ['E715:', 'E488:'], 1) ! CheckDefExecAndScriptFailure(["var x = g:dict_empty.member"], 'E716:', 1) ! ! CheckDefExecAndScriptFailure(['var x: dict = {a: 234, b: "1"}'], 'E1012:', 1) ! CheckDefExecAndScriptFailure(['var x: dict = {a: "x", b: 134}'], 'E1012:', 1) ! CheckDefExecAndScriptFailure(['var x: dict = {a: 234, b: "1"}'], 'E1012:', 1) ! CheckDefExecAndScriptFailure(['var x: dict = {a: "x", b: 134}'], 'E1012:', 1) # invalid types for the key ! CheckDefAndScriptFailure(["var x = {[[1, 2]]: 0}"], ['E1105:', 'E730:'], 1) ! CheckDefFailure(['var x = ({'], 'E723:', 2) ! CheckScriptFailure(['vim9script', 'var x = ({'], 'E723:', 2) ! CheckDefExecAndScriptFailure(['{}[getftype("file")]'], 'E716: Key not present in Dictionary: ""', 1) enddef def Test_expr8_dict_vim9script() --- 2425,2464 ---- var x1: number #{{ fold var x2 = 9 #{{ fold END ! v9.CheckDefAndScriptSuccess(lines) # legacy syntax doesn't work ! v9.CheckDefAndScriptFailure(["var x = #{key: 8}"], 'E1170:', 1) ! v9.CheckDefAndScriptFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1) ! v9.CheckDefAndScriptFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1) ! v9.CheckDefAndScriptFailure(["var x = true ? #{a: 1}"], 'E1170:', 1) ! ! v9.CheckDefAndScriptFailure(["var x = {a:8}"], 'E1069:', 1) ! v9.CheckDefAndScriptFailure(["var x = {a : 8}"], 'E1068:', 1) ! v9.CheckDefAndScriptFailure(["var x = {a :8}"], 'E1068:', 1) ! v9.CheckDefAndScriptFailure(["var x = {a: 8 , b: 9}"], 'E1068:', 1) ! v9.CheckDefAndScriptFailure(["var x = {a: 1,b: 2}"], 'E1069:', 1) ! ! v9.CheckDefAndScriptFailure(["var x = {xxx}"], 'E720:', 1) ! v9.CheckDefAndScriptFailure(["var x = {xxx: 1", "var y = 2"], 'E722:', 2) ! v9.CheckDefFailure(["var x = {xxx: 1,"], 'E723:', 2) ! v9.CheckScriptFailure(['vim9script', "var x = {xxx: 1,"], 'E723:', 2) ! v9.CheckDefAndScriptFailure(["var x = {['a']: xxx}"], ['E1001:', 'E121:'], 1) ! v9.CheckDefAndScriptFailure(["var x = {a: 1, a: 2}"], 'E721:', 1) ! v9.CheckDefExecAndScriptFailure(["var x = g:anint.member"], ['E715:', 'E488:'], 1) ! v9.CheckDefExecAndScriptFailure(["var x = g:dict_empty.member"], 'E716:', 1) ! ! v9.CheckDefExecAndScriptFailure(['var x: dict = {a: 234, b: "1"}'], 'E1012:', 1) ! v9.CheckDefExecAndScriptFailure(['var x: dict = {a: "x", b: 134}'], 'E1012:', 1) ! v9.CheckDefExecAndScriptFailure(['var x: dict = {a: 234, b: "1"}'], 'E1012:', 1) ! v9.CheckDefExecAndScriptFailure(['var x: dict = {a: "x", b: 134}'], 'E1012:', 1) # invalid types for the key ! v9.CheckDefAndScriptFailure(["var x = {[[1, 2]]: 0}"], ['E1105:', 'E730:'], 1) ! v9.CheckDefFailure(['var x = ({'], 'E723:', 2) ! v9.CheckScriptFailure(['vim9script', 'var x = ({'], 'E723:', 2) ! v9.CheckDefExecAndScriptFailure(['{}[getftype("file")]'], 'E716: Key not present in Dictionary: ""', 1) enddef def Test_expr8_dict_vim9script() *************** *** 2484,2496 **** var dd = {k: 123->len()} assert_equal(3, dd.k) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var d = { ["one"]: "one", ["two"]: "two", } assert_equal({one: 'one', two: 'two'}, d) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var d = {one: 1, --- 2484,2496 ---- var dd = {k: 123->len()} assert_equal(3, dd.k) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var d = { ["one"]: "one", ["two"]: "two", } assert_equal({one: 'one', two: 'two'}, d) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var d = {one: 1, *************** *** 2498,2554 **** } assert_equal({one: 1, two: 2}, d) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var d = {one:1, two: 2} END ! CheckDefAndScriptFailure(lines, 'E1069:', 1) lines =<< trim END var d = {one: 1,two: 2} END ! CheckDefAndScriptFailure(lines, 'E1069:', 1) lines =<< trim END var d = {one : 1} END ! CheckDefAndScriptFailure(lines, 'E1068:', 1) lines =<< trim END var d = {one:1} END ! CheckDefAndScriptFailure(lines, 'E1069:', 1) lines =<< trim END var d = {one: 1 , two: 2} END ! CheckDefAndScriptFailure(lines, 'E1068:', 1) lines =<< trim END var l: dict = {a: 234, b: 'x'} END ! CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: dict = {a: 'x', b: 234} END ! CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: dict = {a: 'x', b: 234} END ! CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: dict = {a: 234, b: 'x'} END ! CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var d = {['a']: 234, ['b': 'x'} END ! CheckDefAndScriptFailure(lines, 'E1139:', 1) lines =<< trim END def Func() --- 2498,2554 ---- } assert_equal({one: 1, two: 2}, d) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var d = {one:1, two: 2} END ! v9.CheckDefAndScriptFailure(lines, 'E1069:', 1) lines =<< trim END var d = {one: 1,two: 2} END ! v9.CheckDefAndScriptFailure(lines, 'E1069:', 1) lines =<< trim END var d = {one : 1} END ! v9.CheckDefAndScriptFailure(lines, 'E1068:', 1) lines =<< trim END var d = {one:1} END ! v9.CheckDefAndScriptFailure(lines, 'E1069:', 1) lines =<< trim END var d = {one: 1 , two: 2} END ! v9.CheckDefAndScriptFailure(lines, 'E1068:', 1) lines =<< trim END var l: dict = {a: 234, b: 'x'} END ! v9.CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: dict = {a: 'x', b: 234} END ! v9.CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: dict = {a: 'x', b: 234} END ! v9.CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var l: dict = {a: 234, b: 'x'} END ! v9.CheckDefAndScriptFailure(lines, 'E1012:', 1) lines =<< trim END var d = {['a']: 234, ['b': 'x'} END ! v9.CheckDefAndScriptFailure(lines, 'E1139:', 1) lines =<< trim END def Func() *************** *** 2556,2568 **** enddef defcompile END ! CheckDefAndScriptFailure(lines, 'E1139:', 0) lines =<< trim END var d = {'a': END ! CheckDefFailure(lines, 'E723:', 2) ! CheckScriptFailure(['vim9script'] + lines, 'E15:', 2) lines =<< trim END def Func() --- 2556,2568 ---- enddef defcompile END ! v9.CheckDefAndScriptFailure(lines, 'E1139:', 0) lines =<< trim END var d = {'a': END ! v9.CheckDefFailure(lines, 'E723:', 2) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E15:', 2) lines =<< trim END def Func() *************** *** 2570,2576 **** enddef defcompile END ! CheckDefAndScriptFailure(lines, 'E723:', 0) lines =<< trim END def Failing() --- 2570,2576 ---- enddef defcompile END ! v9.CheckDefAndScriptFailure(lines, 'E723:', 0) lines =<< trim END def Failing() *************** *** 2579,2587 **** var dict = {name: Failing} END if has('channel') ! CheckDefAndScriptFailure(lines, 'E119:', 0) else ! CheckDefAndScriptFailure(lines, 'E117:', 0) endif lines =<< trim END --- 2579,2587 ---- var dict = {name: Failing} END if has('channel') ! v9.CheckDefAndScriptFailure(lines, 'E119:', 0) else ! v9.CheckDefAndScriptFailure(lines, 'E117:', 0) endif lines =<< trim END *************** *** 2589,2595 **** var x = 99 assert_equal({x: 99}, s:) END ! CheckScriptSuccess(lines) enddef def Test_expr8_dict_in_block() --- 2589,2595 ---- var x = 99 assert_equal({x: 99}, s:) END ! v9.CheckScriptSuccess(lines) enddef def Test_expr8_dict_in_block() *************** *** 2609,2615 **** assert_equal({key: 'value'}, g:global) unlet g:global END ! CheckScriptSuccess(lines) delcommand MyCommand delcommand YourCommand --- 2609,2615 ---- assert_equal({key: 'value'}, g:global) unlet g:global END ! v9.CheckScriptSuccess(lines) delcommand MyCommand delcommand YourCommand *************** *** 2631,2637 **** TestBrokenCall() END ! CheckScriptSuccess(lines) enddef let g:oneString = 'one' --- 2631,2637 ---- TestBrokenCall() END ! v9.CheckScriptSuccess(lines) enddef let g:oneString = 'one' *************** *** 2656,2666 **** assert_equal('one', {one: 'one'}.one) assert_equal('one', {one: 'one'}[g:oneString]) END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(["var x = g:dict_one.#$!"], ['E1002:', 'E15:'], 1) ! CheckDefExecAndScriptFailure(["var d: dict", "echo d['a']"], 'E716:', 2) ! CheckDefExecAndScriptFailure(["var d: dict", "d = g:list_empty"], 'E1012: Type mismatch; expected dict but got list', 2) enddef def Test_expr8_any_index_slice() --- 2656,2666 ---- assert_equal('one', {one: 'one'}.one) assert_equal('one', {one: 'one'}[g:oneString]) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(["var x = g:dict_one.#$!"], ['E1002:', 'E15:'], 1) ! v9.CheckDefExecAndScriptFailure(["var d: dict", "echo d['a']"], 'E716:', 2) ! v9.CheckDefExecAndScriptFailure(["var d: dict", "d = g:list_empty"], 'E1012: Type mismatch; expected dict but got list', 2) enddef def Test_expr8_any_index_slice() *************** *** 2756,2771 **** assert_equal(2, g:testdict['b']) END ! CheckDefAndScriptSuccess(lines) ! CheckDefExecAndScriptFailure(['echo g:testblob[2]'], 'E979:', 1) ! CheckDefExecAndScriptFailure(['echo g:testblob[-3]'], 'E979:', 1) ! CheckDefExecAndScriptFailure(['echo g:testlist[4]'], 'E684: list index out of range: 4', 1) ! CheckDefExecAndScriptFailure(['echo g:testlist[-5]'], 'E684:', 1) ! CheckDefExecAndScriptFailure(['echo g:testdict["a" : "b"]'], 'E719:', 1) ! CheckDefExecAndScriptFailure(['echo g:testdict[1]'], 'E716:', 1) unlet g:teststring unlet g:testblob --- 2756,2771 ---- assert_equal(2, g:testdict['b']) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefExecAndScriptFailure(['echo g:testblob[2]'], 'E979:', 1) ! v9.CheckDefExecAndScriptFailure(['echo g:testblob[-3]'], 'E979:', 1) ! v9.CheckDefExecAndScriptFailure(['echo g:testlist[4]'], 'E684: list index out of range: 4', 1) ! v9.CheckDefExecAndScriptFailure(['echo g:testlist[-5]'], 'E684:', 1) ! v9.CheckDefExecAndScriptFailure(['echo g:testdict["a" : "b"]'], 'E719:', 1) ! v9.CheckDefExecAndScriptFailure(['echo g:testdict[1]'], 'E716:', 1) unlet g:teststring unlet g:testblob *************** *** 2790,2796 **** 'one' ]) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var l = [1, --- 2790,2796 ---- 'one' ]) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var l = [1, *************** *** 2810,2816 **** : ]) END ! CheckDefAndScriptSuccess(lines) enddef def SetSomeVar() --- 2810,2816 ---- : ]) END ! v9.CheckDefAndScriptSuccess(lines) enddef def SetSomeVar() *************** *** 2837,2847 **** var sval: string = &path # check v_lock is cleared (requires using valgrind, doesn't always show) ! SetSomeVar() b:someVar = 0 unlet b:someVar END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_environment() --- 2837,2847 ---- var sval: string = &path # check v_lock is cleared (requires using valgrind, doesn't always show) ! g:SetSomeVar() b:someVar = 0 unlet b:someVar END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_environment() *************** *** 2850,2859 **** assert_equal('testvar', $TESTVAR) assert_equal('', $ASDF_ASD_XXX) END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(["var x = $$$"], ['E1002:', 'E15:'], 1) ! CheckDefAndScriptFailure(["$"], ['E1002:', 'E15:'], 1) enddef def Test_expr8_register() --- 2850,2859 ---- assert_equal('testvar', $TESTVAR) assert_equal('', $ASDF_ASD_XXX) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(["var x = $$$"], ['E1002:', 'E15:'], 1) ! v9.CheckDefAndScriptFailure(["$"], ['E1002:', 'E15:'], 1) enddef def Test_expr8_register() *************** *** 2876,2884 **** @= = 'equal' assert_equal('equal', @=) END ! CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure(["@. = 'yes'"], ['E354:', 'E488:'], 1) enddef " This is slow when run under valgrind. --- 2876,2884 ---- @= = 'equal' assert_equal('equal', @=) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefAndScriptFailure(["@. = 'yes'"], ['E354:', 'E488:'], 1) enddef " This is slow when run under valgrind. *************** *** 2908,2914 **** assert_equal('xxx', get(t:, 'no_var', 'xxx')) unlet t:some_var END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_namespace_loop_def() --- 2908,2914 ---- assert_equal('xxx', get(t:, 'no_var', 'xxx')) unlet t:some_var END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_namespace_loop_def() *************** *** 2926,2932 **** assert_equal(0, exists) assert_equal(100000, exists_not) END ! CheckDefSuccess(lines) enddef " NOTE: this is known to be slow. To skip use: --- 2926,2932 ---- assert_equal(0, exists) assert_equal(100000, exists_not) END ! v9.CheckDefSuccess(lines) enddef " NOTE: this is known to be slow. To skip use: *************** *** 2947,2953 **** assert_equal(0, exists) assert_equal(100000, exists_not) END ! CheckScriptSuccess(lines) enddef def Test_expr8_parens() --- 2947,2953 ---- assert_equal(0, exists) assert_equal(100000, exists_not) END ! v9.CheckScriptSuccess(lines) enddef def Test_expr8_parens() *************** *** 2979,2985 **** ) assert_equal('onetwo', s) END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_negate_add() --- 2979,2985 ---- ) assert_equal('onetwo', s) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_negate_add() *************** *** 2993,3030 **** assert_equal(-88, - nr) assert_equal(88, + nr) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var n = 12 echo ++n END ! CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo --n END ! CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo +-n END ! CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo -+n END ! CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo - -n END ! CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo + +n END ! CheckDefAndScriptFailure(lines, 'E15:') enddef def LegacyReturn(): string --- 2993,3030 ---- assert_equal(-88, - nr) assert_equal(88, + nr) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var n = 12 echo ++n END ! v9.CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo --n END ! v9.CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo +-n END ! v9.CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo -+n END ! v9.CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo - -n END ! v9.CheckDefAndScriptFailure(lines, 'E15:') lines =<< trim END var n = 12 echo + +n END ! v9.CheckDefAndScriptFailure(lines, 'E15:') enddef def LegacyReturn(): string *************** *** 3043,3051 **** call assert_equal('legacy', GetLocal()) call assert_equal('legacy', GetLocalPrefix()) END ! CheckScriptSuccess(lines) ! assert_equal('ok', LegacyReturn()) lines =<< trim END vim9script --- 3043,3051 ---- call assert_equal('legacy', GetLocal()) call assert_equal('legacy', GetLocalPrefix()) END ! v9.CheckScriptSuccess(lines) ! assert_equal('ok', g:LegacyReturn()) lines =<< trim END vim9script *************** *** 3054,3060 **** enddef echo GetNumber() END ! CheckScriptFailure(lines, 'E1012: Type mismatch; expected number but got list') enddef def Echo(arg: any): string --- 3054,3060 ---- enddef echo GetNumber() END ! v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected number but got list') enddef def Echo(arg: any): string *************** *** 3067,3087 **** def Test_expr8_call() var lines =<< trim END ! assert_equal('yes', 'yes'->Echo()) assert_equal(true, !range(5)->empty()) assert_equal([0, 1, 2], 3->range()) END ! CheckDefAndScriptSuccess(lines) assert_equal('yes', 'yes' ->s:Echo4Arg()) ! CheckDefAndScriptFailure(["var x = 'yes'->Echo"], 'E107:', 1) ! CheckDefAndScriptFailure([ "var x = substitute ('x', 'x', 'x', 'x')" ], ['E1001:', 'E121:'], 1) ! CheckDefAndScriptFailure(["var Ref = function('len' [1, 2])"], ['E1123:', 'E116:'], 1) var auto_lines =<< trim END def g:some#func(): string return 'found' --- 3067,3107 ---- def Test_expr8_call() var lines =<< trim END ! assert_equal('yes', 'yes'->g:Echo()) assert_equal(true, !range(5)->empty()) assert_equal([0, 1, 2], 3->range()) END ! v9.CheckDefAndScriptSuccess(lines) assert_equal('yes', 'yes' ->s:Echo4Arg()) ! v9.CheckDefAndScriptFailure(["var x = 'yes'->g:Echo"], 'E107:', 1) ! v9.CheckDefAndScriptFailure([ "var x = substitute ('x', 'x', 'x', 'x')" ], ['E1001:', 'E121:'], 1) ! v9.CheckDefAndScriptFailure(["var Ref = function('len' [1, 2])"], ['E1123:', 'E116:'], 1) ! enddef ! ! def g:ExistingGloba(): string ! return 'existing' ! enddef ! ! def Test_expr8_call_global() ! assert_equal('existing', g:ExistingGloba()) ! ! def g:DefinedLater(): string ! return 'later' ! enddef ! assert_equal('later', g:DefinedLater()) ! ! var lines =<< trim END ! echo ExistingGlobal() ! END ! v9.CheckDefAndScriptFailure(lines, 'E117: Unknown function: ExistingGlobal') ! enddef + def Test_expr8_call_autoload() var auto_lines =<< trim END def g:some#func(): string return 'found' *************** *** 3137,3143 **** -> sort() assert_equal([1, 2, 3], sorted) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END def SetNumber(n: number) --- 3157,3163 ---- -> sort() assert_equal([1, 2, 3], sorted) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END def SetNumber(n: number) *************** *** 3165,3178 **** unlet g:number END ! CheckDefAndScriptSuccess(lines) lines =<< trim END def RetVoid() enddef RetVoid()->byteidx(3) END ! CheckDefExecFailure(lines, 'E1013:') enddef def Test_expr8_method_call_linebreak() --- 3185,3198 ---- unlet g:number END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END def RetVoid() enddef RetVoid()->byteidx(3) END ! v9.CheckDefExecFailure(lines, 'E1013:') enddef def Test_expr8_method_call_linebreak() *************** *** 3188,3194 **** defcompile assert_equal('', v:errmsg) END ! CheckScriptSuccess(lines) enddef def Test_expr8_method_call_import() --- 3208,3214 ---- defcompile assert_equal('', v:errmsg) END ! v9.CheckScriptSuccess(lines) enddef def Test_expr8_method_call_import() *************** *** 3212,3218 **** assert_equal([0, 10, 40, 90, 160], Test()) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 3232,3238 ---- assert_equal([0, 10, 40, 90, 160], Test()) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 3220,3226 **** echo range(5)->Xsquare.NoSuchFunc() END ! CheckScriptFailure(lines, 'E1048: Item not found in script: NoSuchFunc') delete('Xsquare.vim') enddef --- 3240,3246 ---- echo range(5)->Xsquare.NoSuchFunc() END ! v9.CheckScriptFailure(lines, 'E1048: Item not found in script: NoSuchFunc') delete('Xsquare.vim') enddef *************** *** 3273,3279 **** assert_equal(false, ![1, 2, 3]->reverse()) assert_equal(true, ![]->reverse()) END ! CheckDefAndScriptSuccess(lines) enddef let g:anumber = 42 --- 3293,3299 ---- assert_equal(false, ![1, 2, 3]->reverse()) assert_equal(true, ![]->reverse()) END ! v9.CheckDefAndScriptSuccess(lines) enddef let g:anumber = 42 *************** *** 3284,3340 **** assert_equal(-1, -nr) assert_equal(-42, -g:anumber) END ! CheckDefAndScriptSuccess(lines) enddef func Test_expr8_fails() ! call CheckDefFailure(["var x = (12"], "E1097:", 3) ! call CheckScriptFailure(['vim9script', "var x = (12"], 'E110:', 2) ! call CheckDefAndScriptFailure(["var x = -'xx'"], "E1030:", 1) ! call CheckDefAndScriptFailure(["var x = +'xx'"], "E1030:", 1) ! call CheckDefAndScriptFailure(["var x = -0z12"], "E974:", 1) ! call CheckDefExecAndScriptFailure(["var x = -[8]"], ["E1012:", 'E745:'], 1) ! call CheckDefExecAndScriptFailure(["var x = -{a: 1}"], ["E1012:", 'E728:'], 1) ! call CheckDefAndScriptFailure(["var x = @"], "E1002:", 1) ! call CheckDefAndScriptFailure(["var x = @<"], "E354:", 1) ! call CheckDefFailure(["var x = [1, 2"], "E697:", 2) ! call CheckScriptFailure(['vim9script', "var x = [1, 2"], 'E696:', 2) ! call CheckDefAndScriptFailure(["var x = [notfound]"], ["E1001:", 'E121:'], 1) ! call CheckDefAndScriptFailure(["var X = () => 123)"], 'E488:', 1) ! call CheckDefAndScriptFailure(["var x = 123->((x) => x + 5)"], "E107:", 1) ! call CheckDefAndScriptFailure(["var x = ¬exist"], 'E113:', 1) ! call CheckDefAndScriptFailure(["&grepprg = [343]"], ['E1012:', 'E730:'], 1) ! call CheckDefExecAndScriptFailure(["echo s:doesnt_exist"], 'E121:', 1) ! call CheckDefExecAndScriptFailure(["echo g:doesnt_exist"], 'E121:', 1) ! call CheckDefAndScriptFailure(["echo a:somevar"], ['E1075:', 'E121:'], 1) ! call CheckDefAndScriptFailure(["echo l:somevar"], ['E1075:', 'E121:'], 1) ! call CheckDefAndScriptFailure(["echo x:somevar"], ['E1075:', 'E121:'], 1) ! call CheckDefExecAndScriptFailure(["var x = +g:astring"], ['E1012:', 'E1030:'], 1) ! call CheckDefExecAndScriptFailure(["var x = +g:ablob"], ['E1012:', 'E974:'], 1) ! call CheckDefExecAndScriptFailure(["var x = +g:alist"], ['E1012:', 'E745:'], 1) ! call CheckDefExecAndScriptFailure(["var x = +g:adict"], ['E1012:', 'E728:'], 1) ! call CheckDefAndScriptFailure(["var x = ''", "var y = x.memb"], ['E1229: Expected dictionary for using key "memb", but got string', 'E488:'], 2) ! call CheckDefAndScriptFailure(["'yes'->", "Echo()"], ['E488: Trailing characters: ->', 'E260: Missing name after ->'], 1) ! call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2) ! call CheckScriptFailure(['vim9script', "[1, 2->len()"], 'E696:', 2) ! call CheckDefFailure(["{a: 1->len()"], 'E723:', 2) ! call CheckScriptFailure(['vim9script', "{a: 1->len()"], 'E722:', 2) ! call CheckDefExecFailure(["{['a']: 1->len()"], 'E723:', 2) ! call CheckScriptFailure(['vim9script', "{['a']: 1->len()"], 'E722:', 2) endfunc let g:Funcrefs = [function('add')] --- 3304,3360 ---- assert_equal(-1, -nr) assert_equal(-42, -g:anumber) END ! v9.CheckDefAndScriptSuccess(lines) enddef func Test_expr8_fails() ! call v9.CheckDefFailure(["var x = (12"], "E1097:", 3) ! call v9.CheckScriptFailure(['vim9script', "var x = (12"], 'E110:', 2) ! call v9.CheckDefAndScriptFailure(["var x = -'xx'"], "E1030:", 1) ! call v9.CheckDefAndScriptFailure(["var x = +'xx'"], "E1030:", 1) ! call v9.CheckDefAndScriptFailure(["var x = -0z12"], "E974:", 1) ! call v9.CheckDefExecAndScriptFailure(["var x = -[8]"], ["E1012:", 'E745:'], 1) ! call v9.CheckDefExecAndScriptFailure(["var x = -{a: 1}"], ["E1012:", 'E728:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = @"], "E1002:", 1) ! call v9.CheckDefAndScriptFailure(["var x = @<"], "E354:", 1) ! call v9.CheckDefFailure(["var x = [1, 2"], "E697:", 2) ! call v9.CheckScriptFailure(['vim9script', "var x = [1, 2"], 'E696:', 2) ! call v9.CheckDefAndScriptFailure(["var x = [notfound]"], ["E1001:", 'E121:'], 1) ! call v9.CheckDefAndScriptFailure(["var X = () => 123)"], 'E488:', 1) ! call v9.CheckDefAndScriptFailure(["var x = 123->((x) => x + 5)"], "E107:", 1) ! call v9.CheckDefAndScriptFailure(["var x = ¬exist"], 'E113:', 1) ! call v9.CheckDefAndScriptFailure(["&grepprg = [343]"], ['E1012:', 'E730:'], 1) ! call v9.CheckDefExecAndScriptFailure(["echo s:doesnt_exist"], 'E121:', 1) ! call v9.CheckDefExecAndScriptFailure(["echo g:doesnt_exist"], 'E121:', 1) ! call v9.CheckDefAndScriptFailure(["echo a:somevar"], ['E1075:', 'E121:'], 1) ! call v9.CheckDefAndScriptFailure(["echo l:somevar"], ['E1075:', 'E121:'], 1) ! call v9.CheckDefAndScriptFailure(["echo x:somevar"], ['E1075:', 'E121:'], 1) ! call v9.CheckDefExecAndScriptFailure(["var x = +g:astring"], ['E1012:', 'E1030:'], 1) ! call v9.CheckDefExecAndScriptFailure(["var x = +g:ablob"], ['E1012:', 'E974:'], 1) ! call v9.CheckDefExecAndScriptFailure(["var x = +g:alist"], ['E1012:', 'E745:'], 1) ! call v9.CheckDefExecAndScriptFailure(["var x = +g:adict"], ['E1012:', 'E728:'], 1) ! call v9.CheckDefAndScriptFailure(["var x = ''", "var y = x.memb"], ['E1229: Expected dictionary for using key "memb", but got string', 'E488:'], 2) ! call v9.CheckDefAndScriptFailure(["'yes'->", "Echo()"], ['E488: Trailing characters: ->', 'E260: Missing name after ->'], 1) ! call v9.CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2) ! call v9.CheckScriptFailure(['vim9script', "[1, 2->len()"], 'E696:', 2) ! call v9.CheckDefFailure(["{a: 1->len()"], 'E723:', 2) ! call v9.CheckScriptFailure(['vim9script', "{a: 1->len()"], 'E722:', 2) ! call v9.CheckDefExecFailure(["{['a']: 1->len()"], 'E723:', 2) ! call v9.CheckScriptFailure(['vim9script', "{['a']: 1->len()"], 'E722:', 2) endfunc let g:Funcrefs = [function('add')] *************** *** 3380,3386 **** var d = {key: 123} assert_equal(123, d.key) END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_string_subscript() --- 3400,3406 ---- var d = {key: 123} assert_equal(123, d.key) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_string_subscript() *************** *** 3438,3485 **** assert_equal('sd', g:astring[1 : 2]) assert_equal('asdf', g:astring[:]) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var d = 'asdf'[1 : END ! CheckDefFailure(lines, 'E1097:', 3) ! CheckScriptFailure(['vim9script'] + lines, 'E15:', 2) lines =<< trim END var d = 'asdf'[1 : xxx] END ! CheckDefAndScriptFailure(lines, ['E1001:', 'E121:'], 1) lines =<< trim END var d = 'asdf'[1 : 2 END ! CheckDefFailure(lines, 'E1097:', 3) ! CheckScriptFailure(['vim9script'] + lines, 'E111:', 2) lines =<< trim END var d = 'asdf'[1 : 2 echo d END ! CheckDefAndScriptFailure(lines, 'E111:', 2) lines =<< trim END var d = 'asdf'['1'] echo d END ! CheckDefAndScriptFailure(lines, ['E1012: Type mismatch; expected number but got string', 'E1030: Using a String as a Number: "1"'], 1) lines =<< trim END var d = 'asdf'['1' : 2] echo d END ! CheckDefAndScriptFailure(lines, ['E1012: Type mismatch; expected number but got string', 'E1030: Using a String as a Number: "1"'], 1) lines =<< trim END var d = 'asdf'[1 : '2'] echo d END ! CheckDefAndScriptFailure(lines, ['E1012: Type mismatch; expected number but got string', 'E1030: Using a String as a Number: "2"'], 1) enddef def Test_expr8_list_subscript() --- 3458,3505 ---- assert_equal('sd', g:astring[1 : 2]) assert_equal('asdf', g:astring[:]) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var d = 'asdf'[1 : END ! v9.CheckDefFailure(lines, 'E1097:', 3) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E15:', 2) lines =<< trim END var d = 'asdf'[1 : xxx] END ! v9.CheckDefAndScriptFailure(lines, ['E1001:', 'E121:'], 1) lines =<< trim END var d = 'asdf'[1 : 2 END ! v9.CheckDefFailure(lines, 'E1097:', 3) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E111:', 2) lines =<< trim END var d = 'asdf'[1 : 2 echo d END ! v9.CheckDefAndScriptFailure(lines, 'E111:', 2) lines =<< trim END var d = 'asdf'['1'] echo d END ! v9.CheckDefAndScriptFailure(lines, ['E1012: Type mismatch; expected number but got string', 'E1030: Using a String as a Number: "1"'], 1) lines =<< trim END var d = 'asdf'['1' : 2] echo d END ! v9.CheckDefAndScriptFailure(lines, ['E1012: Type mismatch; expected number but got string', 'E1030: Using a String as a Number: "1"'], 1) lines =<< trim END var d = 'asdf'[1 : '2'] echo d END ! v9.CheckDefAndScriptFailure(lines, ['E1012: Type mismatch; expected number but got string', 'E1030: Using a String as a Number: "2"'], 1) enddef def Test_expr8_list_subscript() *************** *** 3510,3519 **** assert_equal(2, g:alist[0]) assert_equal([2, 3, 4], g:alist[:]) END ! CheckDefAndScriptSuccess(lines) lines = ['var l = [0, 1, 2]', 'echo l[g:astring : g:theone]'] ! CheckDefExecAndScriptFailure(lines, ['E1012:', 'E1030:'], 2) lines =<< trim END var ld = [] --- 3530,3539 ---- assert_equal(2, g:alist[0]) assert_equal([2, 3, 4], g:alist[:]) END ! v9.CheckDefAndScriptSuccess(lines) lines = ['var l = [0, 1, 2]', 'echo l[g:astring : g:theone]'] ! v9.CheckDefExecAndScriptFailure(lines, ['E1012:', 'E1030:'], 2) lines =<< trim END var ld = [] *************** *** 3522,3528 **** enddef defcompile END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_dict_subscript() --- 3542,3548 ---- enddef defcompile END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_dict_subscript() *************** *** 3543,3549 **** enddef defcompile END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_blob_subscript() --- 3563,3569 ---- enddef defcompile END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_blob_subscript() *************** *** 3555,3561 **** assert_equal(0x01, g:ablob[0]) assert_equal(0z01ab, g:ablob[:]) END ! CheckDefAndScriptSuccess(lines) enddef def Test_expr8_subscript_linebreak() --- 3575,3581 ---- assert_equal(0x01, g:ablob[0]) assert_equal(0z01ab, g:ablob[:]) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr8_subscript_linebreak() *************** *** 3591,3628 **** assert_equal(33, d .one) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var d = {one: 33} assert_equal(33, d. one) END ! CheckDefAndScriptFailure(lines, ['E1127:', 'E116:'], 2) enddef func Test_expr8_trailing_fails() ! call CheckDefAndScriptFailure(['var l = [2]', 'l->((ll) => add(ll, 8))'], 'E107:', 2) ! call CheckDefAndScriptFailure(['var l = [2]', 'l->((ll) => add(ll, 8)) ()'], 'E274:', 2) endfunc func Test_expr_fails() ! call CheckDefAndScriptFailure(["var x = '1'is2"], 'E488:', 1) ! call CheckDefAndScriptFailure(["var x = '1'isnot2"], 'E488:', 1) ! call CheckDefAndScriptFailure(["CallMe ('yes')"], ['E476:', 'E492:'], 1) ! call CheckDefAndScriptFailure(["CallMe2('yes','no')"], 'E1069:', 1) ! call CheckDefAndScriptFailure(["v:nosuch += 3"], ['E1001:', 'E121:'], 1) ! call CheckDefAndScriptFailure(["var v:statusmsg = ''"], 'E1016: Cannot declare a v: variable:', 1) ! call CheckDefAndScriptFailure(["var asdf = v:nosuch"], ['E1001:', 'E121:'], 1) ! call CheckDefFailure(["echo len('asdf'"], 'E110:', 2) ! call CheckScriptFailure(['vim9script', "echo len('asdf'"], 'E116:', 2) ! call CheckDefAndScriptFailure(["echo Func0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789()"], ['E1011:', 'E117:'], 1) ! call CheckDefAndScriptFailure(["echo doesnotexist()"], 'E117:', 1) endfunc " vim: shiftwidth=2 sts=2 expandtab --- 3611,3648 ---- assert_equal(33, d .one) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var d = {one: 33} assert_equal(33, d. one) END ! v9.CheckDefAndScriptFailure(lines, ['E1127:', 'E116:'], 2) enddef func Test_expr8_trailing_fails() ! call v9.CheckDefAndScriptFailure(['var l = [2]', 'l->((ll) => add(ll, 8))'], 'E107:', 2) ! call v9.CheckDefAndScriptFailure(['var l = [2]', 'l->((ll) => add(ll, 8)) ()'], 'E274:', 2) endfunc func Test_expr_fails() ! call v9.CheckDefAndScriptFailure(["var x = '1'is2"], 'E488:', 1) ! call v9.CheckDefAndScriptFailure(["var x = '1'isnot2"], 'E488:', 1) ! call v9.CheckDefAndScriptFailure(["CallMe ('yes')"], ['E476:', 'E492:'], 1) ! call v9.CheckDefAndScriptFailure(["CallMe2('yes','no')"], 'E1069:', 1) ! call v9.CheckDefAndScriptFailure(["v:nosuch += 3"], ['E1001:', 'E121:'], 1) ! call v9.CheckDefAndScriptFailure(["var v:statusmsg = ''"], 'E1016: Cannot declare a v: variable:', 1) ! call v9.CheckDefAndScriptFailure(["var asdf = v:nosuch"], ['E1001:', 'E121:'], 1) ! call v9.CheckDefFailure(["echo len('asdf'"], 'E110:', 2) ! call v9.CheckScriptFailure(['vim9script', "echo len('asdf'"], 'E116:', 2) ! call v9.CheckDefAndScriptFailure(["echo Func0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789()"], ['E1011:', 'E117:'], 1) ! call v9.CheckDefAndScriptFailure(["echo doesnotexist()"], 'E117:', 1) endfunc " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.4256/src/testdir/test_vim9_func.vim 2022-01-18 18:46:03.729827420 +0000 --- src/testdir/test_vim9_func.vim 2022-01-29 19:46:35.387957336 +0000 *************** *** 3,9 **** source check.vim source term_util.vim source view_util.vim ! source vim9.vim source screendump.vim func Test_def_basic() --- 3,9 ---- source check.vim source term_util.vim source view_util.vim ! import './vim9.vim' as v9 source screendump.vim func Test_def_basic() *************** *** 30,42 **** defcompile END writefile(lines, 'XTest_compile_error') ! var buf = RunVimInTerminal('-S XTest_compile_error', {rows: 10, wait_for_ruler: 0}) ! WaitForAssert(() => assert_match('Error detected while compiling command line.*Fails.*Variable not found: nothing', ! Term_getlines(buf, range(1, 9)))) # clean up ! StopVimInTerminal(buf) delete('XTest_compile_error') enddef --- 30,42 ---- defcompile END writefile(lines, 'XTest_compile_error') ! var buf = g:RunVimInTerminal('-S XTest_compile_error', {rows: 10, wait_for_ruler: 0}) ! g:WaitForAssert(() => assert_match('Error detected while compiling command line.*Fails.*Variable not found: nothing', ! g:Term_getlines(buf, range(1, 9)))) # clean up ! g:StopVimInTerminal(buf) delete('XTest_compile_error') enddef *************** *** 64,75 **** lines[1] = 'set rtp=' .. getcwd() .. '/Xdir' writefile(lines, 'XTest_compile_error') ! var buf = RunVimInTerminal('-S XTest_compile_error', {rows: 10, wait_for_ruler: 0}) ! WaitForAssert(() => assert_match('Error detected while compiling command line.*function script#OnlyCompiled.*Invalid command: invalid', ! Term_getlines(buf, range(1, 9)))) # clean up ! StopVimInTerminal(buf) delete('XTest_compile_error') delete('Xdir', 'rf') enddef --- 64,75 ---- lines[1] = 'set rtp=' .. getcwd() .. '/Xdir' writefile(lines, 'XTest_compile_error') ! var buf = g:RunVimInTerminal('-S XTest_compile_error', {rows: 10, wait_for_ruler: 0}) ! g:WaitForAssert(() => assert_match('Error detected while compiling command line.*function script#OnlyCompiled.*Invalid command: invalid', ! g:Term_getlines(buf, range(1, 9)))) # clean up ! g:StopVimInTerminal(buf) delete('XTest_compile_error') delete('Xdir', 'rf') enddef *************** *** 87,93 **** silent! Foo() Bar() END ! CheckScriptFailureList(lines, ['E1012:', 'E1191:']) enddef def Test_wrong_function_name() --- 87,93 ---- silent! Foo() Bar() END ! v9.CheckScriptFailureList(lines, ['E1012:', 'E1191:']) enddef def Test_wrong_function_name() *************** *** 97,103 **** echo 'foo' endfunc END ! CheckScriptFailure(lines, 'E128:') lines =<< trim END vim9script --- 97,103 ---- echo 'foo' endfunc END ! v9.CheckScriptFailure(lines, 'E128:') lines =<< trim END vim9script *************** *** 105,111 **** echo 'foo' enddef END ! CheckScriptFailure(lines, 'E128:') enddef def Test_autoload_name_mismatch() --- 105,111 ---- echo 'foo' enddef END ! v9.CheckScriptFailure(lines, 'E128:') enddef def Test_autoload_name_mismatch() *************** *** 126,132 **** lines =<< trim END call script#Function() END ! CheckScriptFailure(lines, 'E746:', 2) &rtp = save_rtp delete(dir, 'rf') --- 126,132 ---- lines =<< trim END call script#Function() END ! v9.CheckScriptFailure(lines, 'E746:', 2) &rtp = save_rtp delete(dir, 'rf') *************** *** 154,160 **** assert_equal('no', foobar#var) END ! CheckDefAndScriptSuccess(lines) &rtp = save_rtp delete(dir, 'rf') --- 154,160 ---- assert_equal('no', foobar#var) END ! v9.CheckDefAndScriptSuccess(lines) &rtp = save_rtp delete(dir, 'rf') *************** *** 179,185 **** # The error in the autoload script cannot be checked with assert_fails(), use # CheckDefSuccess() instead of CheckDefFailure() try ! CheckDefSuccess(['scripterror#function()']) catch assert_match('E121: Undefined variable: 0', v:exception) endtry --- 179,185 ---- # The error in the autoload script cannot be checked with assert_fails(), use # CheckDefSuccess() instead of CheckDefFailure() try ! v9.CheckDefSuccess(['scripterror#function()']) catch assert_match('E121: Undefined variable: 0', v:exception) endtry *************** *** 198,204 **** writefile(lines, dir .. '/scriptcaught.vim') g:called_function = 'no' ! CheckDefSuccess(['scriptcaught#function()']) assert_match('E121: Undefined variable: 0', g:caught) assert_equal('yes', g:called_function) --- 198,204 ---- writefile(lines, dir .. '/scriptcaught.vim') g:called_function = 'no' ! v9.CheckDefSuccess(['scriptcaught#function()']) assert_match('E121: Undefined variable: 0', g:caught) assert_equal('yes', g:called_function) *************** *** 206,216 **** delete(dir, 'rf') enddef ! def CallRecursive(n: number): number return CallRecursive(n + 1) enddef ! def CallMapRecursive(l: list): number return map(l, (_, v) => CallMapRecursive([v]))[0] enddef --- 206,216 ---- delete(dir, 'rf') enddef ! def s:CallRecursive(n: number): number return CallRecursive(n + 1) enddef ! def s:CallMapRecursive(l: list): number return map(l, (_, v) => CallMapRecursive([v]))[0] enddef *************** *** 243,249 **** endfunc enddef END ! CheckScriptFailure(lines, 'E1151:', 3) lines =<< trim END def Test() --- 243,249 ---- endfunc enddef END ! v9.CheckScriptFailure(lines, 'E1151:', 3) lines =<< trim END def Test() *************** *** 252,258 **** enddef enddef END ! CheckScriptFailure(lines, 'E1152:', 4) lines =<< trim END def Ok() --- 252,258 ---- enddef enddef END ! v9.CheckScriptFailure(lines, 'E1152:', 4) lines =<< trim END def Ok() *************** *** 262,268 **** echo 'hello' enddef there END ! CheckScriptFailure(lines, 'E1173: Text found after enddef: there', 6) enddef def Test_missing_endfunc_enddef() --- 262,268 ---- echo 'hello' enddef there END ! v9.CheckScriptFailure(lines, 'E1173: Text found after enddef: there', 6) enddef def Test_missing_endfunc_enddef() *************** *** 272,278 **** echo 'test' endef END ! CheckScriptFailure(lines, 'E1057:', 2) lines =<< trim END vim9script --- 272,278 ---- echo 'test' endef END ! v9.CheckScriptFailure(lines, 'E1057:', 2) lines =<< trim END vim9script *************** *** 280,286 **** echo 'test' enfffunc END ! CheckScriptFailure(lines, 'E126:', 2) enddef def Test_white_space_before_paren() --- 280,286 ---- echo 'test' enfffunc END ! v9.CheckScriptFailure(lines, 'E126:', 2) enddef def Test_white_space_before_paren() *************** *** 290,296 **** echo 'test' enddef END ! CheckScriptFailure(lines, 'E1068:', 2) lines =<< trim END vim9script --- 290,296 ---- echo 'test' enddef END ! v9.CheckScriptFailure(lines, 'E1068:', 2) lines =<< trim END vim9script *************** *** 298,318 **** echo 'test' endfunc END ! CheckScriptFailure(lines, 'E1068:', 2) lines =<< trim END def Test () echo 'test' enddef END ! CheckScriptFailure(lines, 'E1068:', 1) lines =<< trim END func Test () echo 'test' endfunc END ! CheckScriptSuccess(lines) enddef def Test_enddef_dict_key() --- 298,318 ---- echo 'test' endfunc END ! v9.CheckScriptFailure(lines, 'E1068:', 2) lines =<< trim END def Test () echo 'test' enddef END ! v9.CheckScriptFailure(lines, 'E1068:', 1) lines =<< trim END func Test () echo 'test' endfunc END ! v9.CheckScriptSuccess(lines) enddef def Test_enddef_dict_key() *************** *** 338,345 **** enddef def Test_return_something() ! ReturnString()->assert_equal('string') ! ReturnNumber()->assert_equal(123) assert_fails('ReturnGlobal()', 'E1012: Type mismatch; expected number but got string', '', 1, 'ReturnGlobal') var lines =<< trim END --- 338,345 ---- enddef def Test_return_something() ! g:ReturnString()->assert_equal('string') ! g:ReturnNumber()->assert_equal(123) assert_fails('ReturnGlobal()', 'E1012: Type mismatch; expected number but got string', '', 1, 'ReturnGlobal') var lines =<< trim END *************** *** 354,360 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1096:') enddef def Test_check_argument_type() --- 354,360 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1096:') enddef def Test_check_argument_type() *************** *** 370,394 **** disass Func Func() END ! CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got bool', 2) enddef def Test_missing_return() ! CheckDefFailure(['def Missing(): number', ' if g:cond', ' echo "no return"', ' else', ' return 0', ' endif' 'enddef'], 'E1027:') ! CheckDefFailure(['def Missing(): number', ' if g:cond', ' return 1', ' else', ' echo "no return"', ' endif' 'enddef'], 'E1027:') ! CheckDefFailure(['def Missing(): number', ' if g:cond', ' return 1', ' else', --- 370,394 ---- disass Func Func() END ! v9.CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got bool', 2) enddef def Test_missing_return() ! v9.CheckDefFailure(['def Missing(): number', ' if g:cond', ' echo "no return"', ' else', ' return 0', ' endif' 'enddef'], 'E1027:') ! v9.CheckDefFailure(['def Missing(): number', ' if g:cond', ' return 1', ' else', ' echo "no return"', ' endif' 'enddef'], 'E1027:') ! v9.CheckDefFailure(['def Missing(): number', ' if g:cond', ' return 1', ' else', *************** *** 409,415 **** enddef defcompile END ! CheckScriptSuccess(lines) enddef let s:nothing = 0 --- 409,415 ---- enddef defcompile END ! v9.CheckScriptSuccess(lines) enddef let s:nothing = 0 *************** *** 422,428 **** enddef def Test_return_nothing() ! ReturnNothing() s:nothing->assert_equal(1) enddef --- 422,428 ---- enddef def Test_return_nothing() ! g:ReturnNothing() s:nothing->assert_equal(1) enddef *************** *** 434,440 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1010:', 2) lines =<< trim END vim9script --- 434,440 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1010:', 2) lines =<< trim END vim9script *************** *** 448,455 **** echo Test(Inc) END # doing this twice was leaking memory ! CheckScriptFailure(lines, 'E1010:') ! CheckScriptFailure(lines, 'E1010:') enddef def Test_return_list_any() --- 448,455 ---- echo Test(Inc) END # doing this twice was leaking memory ! v9.CheckScriptFailure(lines, 'E1010:') ! v9.CheckScriptFailure(lines, 'E1010:') enddef def Test_return_list_any() *************** *** 464,470 **** enddef echo Func() END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 464,470 ---- enddef echo Func() END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 475,484 **** enddef echo Func() END ! CheckScriptSuccess(lines) enddef ! func Increment() let g:counter += 1 endfunc --- 475,484 ---- enddef echo Func() END ! v9.CheckScriptSuccess(lines) enddef ! func s:Increment() let g:counter += 1 endfunc *************** *** 493,499 **** unlet g:counter enddef ! def MyVarargs(arg: string, ...rest: list): string var res = arg for s in rest res ..= ',' .. s --- 493,499 ---- unlet g:counter enddef ! def s:MyVarargs(arg: string, ...rest: list): string var res = arg for s in rest res ..= ',' .. s *************** *** 508,530 **** enddef def Test_call_white_space() ! CheckDefAndScriptFailure(["call Test ('text')"], ['E476:', 'E1068:']) enddef def MyDefaultArgs(name = 'string'): string return name enddef ! def MyDefaultSecond(name: string, second: bool = true): string return second ? name : 'none' enddef def Test_call_default_args() ! MyDefaultArgs()->assert_equal('string') ! MyDefaultArgs(v:none)->assert_equal('string') ! MyDefaultArgs('one')->assert_equal('one') ! assert_fails('MyDefaultArgs("one", "two")', 'E118:', '', 4, 'Test_call_default_args') MyDefaultSecond('test')->assert_equal('test') MyDefaultSecond('test', true)->assert_equal('test') --- 508,530 ---- enddef def Test_call_white_space() ! v9.CheckDefAndScriptFailure(["call Test ('text')"], ['E476:', 'E1068:']) enddef def MyDefaultArgs(name = 'string'): string return name enddef ! def s:MyDefaultSecond(name: string, second: bool = true): string return second ? name : 'none' enddef def Test_call_default_args() ! g:MyDefaultArgs()->assert_equal('string') ! g:MyDefaultArgs(v:none)->assert_equal('string') ! g:MyDefaultArgs('one')->assert_equal('one') ! assert_fails('g:MyDefaultArgs("one", "two")', 'E118:', '', 4, 'Test_call_default_args') MyDefaultSecond('test')->assert_equal('test') MyDefaultSecond('test', true)->assert_equal('test') *************** *** 549,561 **** DefArg(1234)->assert_equal('12341234') DefArg("ok")->assert_equal('okok') END ! CheckDefAndScriptSuccess(lines) ! CheckScriptFailure(['def Func(arg: number = asdf)', 'enddef', 'defcompile'], 'E1001:') delfunc g:Func ! CheckScriptFailure(['def Func(arg: number = "text")', 'enddef', 'defcompile'], 'E1013: Argument 1: type mismatch, expected number but got string') delfunc g:Func ! CheckDefFailure(['def Func(x: number = )', 'enddef'], 'E15:') lines =<< trim END vim9script --- 549,561 ---- DefArg(1234)->assert_equal('12341234') DefArg("ok")->assert_equal('okok') END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckScriptFailure(['def Func(arg: number = asdf)', 'enddef', 'defcompile'], 'E1001:') delfunc g:Func ! v9.CheckScriptFailure(['def Func(arg: number = "text")', 'enddef', 'defcompile'], 'E1013: Argument 1: type mismatch, expected number but got string') delfunc g:Func ! v9.CheckDefFailure(['def Func(x: number = )', 'enddef'], 'E15:') lines =<< trim END vim9script *************** *** 563,569 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1001: Variable not found: b') # using script variable requires matching type or type cast when executed lines =<< trim END --- 563,569 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1001: Variable not found: b') # using script variable requires matching type or type cast when executed lines =<< trim END *************** *** 574,581 **** enddef defcompile END ! CheckScriptSuccess(lines + ['a = "text"', 'Func()']) ! CheckScriptFailure(lines + ['a = 123', 'Func()'], 'E1013: Argument 1: type mismatch, expected string but got number') # using global variable does not require type cast lines =<< trim END --- 574,581 ---- enddef defcompile END ! v9.CheckScriptSuccess(lines + ['a = "text"', 'Func()']) ! v9.CheckScriptFailure(lines + ['a = 123', 'Func()'], 'E1013: Argument 1: type mismatch, expected string but got number') # using global variable does not require type cast lines =<< trim END *************** *** 586,595 **** g:str = 'works' Func() END ! CheckScriptSuccess(lines) enddef ! def FuncWithComment( # comment a: number, #comment b: bool, # comment c: string) #comment --- 586,595 ---- g:str = 'works' Func() END ! v9.CheckScriptSuccess(lines) enddef ! def s:FuncWithComment( # comment a: number, #comment b: bool, # comment c: string) #comment *************** *** 606,612 **** arg: string) enddef END ! CheckScriptFailure(lines, 'E125:', 1) lines =<< trim END def Func( --- 606,612 ---- arg: string) enddef END ! v9.CheckScriptFailure(lines, 'E125:', 1) lines =<< trim END def Func( *************** *** 614,620 **** ) enddef END ! CheckScriptFailure(lines, 'E475:', 2) lines =<< trim END def Func( --- 614,620 ---- ) enddef END ! v9.CheckScriptFailure(lines, 'E475:', 2) lines =<< trim END def Func( *************** *** 622,628 **** )# comment enddef END ! CheckScriptFailure(lines, 'E488:', 3) enddef def Test_nested_function() --- 622,628 ---- )# comment enddef END ! v9.CheckScriptFailure(lines, 'E488:', 3) enddef def Test_nested_function() *************** *** 636,646 **** endfunc NestedFunc(':func')->assert_equal('nested :func') ! CheckDefFailure(['def Nested()', 'enddef', 'Nested(66)'], 'E118:') ! CheckDefFailure(['def Nested(arg: string)', 'enddef', 'Nested()'], 'E119:') ! CheckDefFailure(['def s:Nested()', 'enddef'], 'E1075:') ! CheckDefFailure(['def b:Nested()', 'enddef'], 'E1075:') var lines =<< trim END def Outer() --- 636,646 ---- endfunc NestedFunc(':func')->assert_equal('nested :func') ! v9.CheckDefFailure(['def Nested()', 'enddef', 'Nested(66)'], 'E118:') ! v9.CheckDefFailure(['def Nested(arg: string)', 'enddef', 'Nested()'], 'E119:') ! v9.CheckDefFailure(['def s:Nested()', 'enddef'], 'E1075:') ! v9.CheckDefFailure(['def b:Nested()', 'enddef'], 'E1075:') var lines =<< trim END def Outer() *************** *** 651,657 **** enddef enddef END ! CheckDefFailure(lines, 'E1073:') lines =<< trim END def Outer() --- 651,657 ---- enddef enddef END ! v9.CheckDefFailure(lines, 'E1073:') lines =<< trim END def Outer() *************** *** 662,668 **** enddef enddef END ! CheckDefFailure(lines, 'E1117:') lines =<< trim END vim9script --- 662,668 ---- enddef enddef END ! v9.CheckDefFailure(lines, 'E1117:') lines =<< trim END vim9script *************** *** 675,681 **** Outer() Inner() END ! CheckScriptFailure(lines, 'E117: Unknown function: Inner') assert_equal('ok', g:result) unlet g:result --- 675,681 ---- Outer() Inner() END ! v9.CheckScriptFailure(lines, 'E117: Unknown function: Inner') assert_equal('ok', g:result) unlet g:result *************** *** 696,702 **** assert_equal(1, Test()) assert_equal(2, Test()) END ! CheckScriptSuccess(lines) # also works when "thecount" is inside the "if" block lines =<< trim END --- 696,702 ---- assert_equal(1, Test()) assert_equal(2, Test()) END ! v9.CheckScriptSuccess(lines) # also works when "thecount" is inside the "if" block lines =<< trim END *************** *** 715,721 **** assert_equal(1, Test()) assert_equal(2, Test()) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 715,721 ---- assert_equal(1, Test()) assert_equal(2, Test()) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 726,732 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1173: Text found after enddef: burp', 3) enddef def Test_not_nested_function() --- 726,732 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1173: Text found after enddef: burp', 3) enddef def Test_not_nested_function() *************** *** 759,765 **** g:Inner()->assert_equal('inner') delfunc g:Inner END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 759,765 ---- g:Inner()->assert_equal('inner') delfunc g:Inner END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 779,785 **** g:Inner()->assert_equal('inner') delfunc g:Inner END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 779,785 ---- g:Inner()->assert_equal('inner') delfunc g:Inner END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 792,798 **** Outer() Outer() END ! CheckScriptFailure(lines, "E122:") delfunc g:Inner lines =<< trim END --- 792,798 ---- Outer() Outer() END ! v9.CheckScriptFailure(lines, "E122:") delfunc g:Inner lines =<< trim END *************** *** 805,811 **** enddef Outer() END ! CheckScriptSuccess(lines) delfunc g:Inner lines =<< trim END --- 805,811 ---- enddef Outer() END ! v9.CheckScriptSuccess(lines) delfunc g:Inner lines =<< trim END *************** *** 820,826 **** enddef defcompile END ! CheckScriptFailure(lines, "E1073:", 1) lines =<< trim END vim9script --- 820,826 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, "E1073:", 1) lines =<< trim END vim9script *************** *** 831,837 **** echo 'script' enddef END ! CheckScriptFailure(lines, "E1073:", 5) enddef def DefListAll() --- 831,837 ---- echo 'script' enddef END ! v9.CheckScriptFailure(lines, "E1073:", 5) enddef def DefListAll() *************** *** 867,873 **** enddef defcompile END ! CheckScriptFailure(lines, 'E476:', 1) enddef def Test_global_local_function() --- 867,873 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E476:', 1) enddef def Test_global_local_function() *************** *** 883,889 **** Func()->assert_equal('local') delfunc g:Func END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 883,889 ---- Func()->assert_equal('local') delfunc g:Func END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 892,898 **** enddef s:Funcy() END ! CheckScriptFailure(lines, 'E117:') enddef def Test_local_function_shadows_global() --- 892,898 ---- enddef s:Funcy() END ! v9.CheckScriptFailure(lines, 'E117:') enddef def Test_local_function_shadows_global() *************** *** 909,915 **** AnotherFunc()->assert_equal(7) delfunc g:Gfunc END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 909,915 ---- AnotherFunc()->assert_equal(7) delfunc g:Gfunc END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 921,930 **** enddef AnotherFunc() END ! CheckScriptFailure(lines, 'E705:') delfunc g:Func ! # global function is found without g: prefix lines =<< trim END vim9script def g:Func(): string --- 921,930 ---- enddef AnotherFunc() END ! v9.CheckScriptFailure(lines, 'E705:') delfunc g:Func ! # global function is not found with g: prefix lines =<< trim END vim9script def g:Func(): string *************** *** 934,942 **** return Func() enddef assert_equal('global', AnotherFunc()) - delfunc g:Func END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 934,942 ---- return Func() enddef assert_equal('global', AnotherFunc()) END ! v9.CheckScriptFailure(lines, 'E117:') ! delfunc g:Func lines =<< trim END vim9script *************** *** 946,952 **** assert_equal('global', Func()) delfunc g:Func END ! CheckScriptSuccess(lines) # This does not shadow "i" which is visible only inside the for loop lines =<< trim END --- 946,952 ---- assert_equal('global', Func()) delfunc g:Func END ! v9.CheckScriptSuccess(lines) # This does not shadow "i" which is visible only inside the for loop lines =<< trim END *************** *** 961,967 **** Foo(i) endfor END ! CheckScriptSuccess(lines) enddef func TakesOneArg(arg) --- 961,967 ---- Foo(i) endfor END ! v9.CheckScriptSuccess(lines) enddef func TakesOneArg(arg) *************** *** 969,978 **** endfunc def Test_call_wrong_args() ! CheckDefFailure(['TakesOneArg()'], 'E119:') ! CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:') ! CheckDefFailure(['bufnr(xxx)'], 'E1001:') ! CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:') var lines =<< trim END vim9script --- 969,978 ---- endfunc def Test_call_wrong_args() ! v9.CheckDefFailure(['g:TakesOneArg()'], 'E119:') ! v9.CheckDefFailure(['g:TakesOneArg(11, 22)'], 'E118:') ! v9.CheckDefFailure(['bufnr(xxx)'], 'E1001:') ! v9.CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:') var lines =<< trim END vim9script *************** *** 981,987 **** enddef Func([]) END ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got list', 5) # argument name declared earlier is found when declaring a function lines =<< trim END --- 981,987 ---- enddef Func([]) END ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got list', 5) # argument name declared earlier is found when declaring a function lines =<< trim END *************** *** 991,997 **** echo nr enddef END ! CheckScriptFailure(lines, 'E1168:') # argument name declared later is only found when compiling lines =<< trim END --- 991,997 ---- echo nr enddef END ! v9.CheckScriptFailure(lines, 'E1168:') # argument name declared later is only found when compiling lines =<< trim END *************** *** 1001,1008 **** enddef var name = 'piet' END ! CheckScriptSuccess(lines) ! CheckScriptFailure(lines + ['defcompile'], 'E1168:') lines =<< trim END vim9script --- 1001,1008 ---- enddef var name = 'piet' END ! v9.CheckScriptSuccess(lines) ! v9.CheckScriptFailure(lines + ['defcompile'], 'E1168:') lines =<< trim END vim9script *************** *** 1062,1071 **** enddef Testme() END ! CheckScriptSuccess(head + ["funcMap['func']('str', 123, [1, 2, 3])"] + tail) ! CheckScriptFailure(head + ["funcMap['func']('str', 123)"] + tail, 'E119:') ! CheckScriptFailure(head + ["funcMap['func']('str', 123, [1], 4)"] + tail, 'E118:') var lines =<< trim END vim9script --- 1062,1071 ---- enddef Testme() END ! v9.CheckScriptSuccess(head + ["funcMap['func']('str', 123, [1, 2, 3])"] + tail) ! v9.CheckScriptFailure(head + ["funcMap['func']('str', 123)"] + tail, 'E119:') ! v9.CheckScriptFailure(head + ["funcMap['func']('str', 123, [1], 4)"] + tail, 'E118:') var lines =<< trim END vim9script *************** *** 1073,1079 **** Ref = (j) => !j echo Ref(false) END ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got bool', 4) lines =<< trim END vim9script --- 1073,1079 ---- Ref = (j) => !j echo Ref(false) END ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got bool', 4) lines =<< trim END vim9script *************** *** 1081,1087 **** Ref = (j) => !j call Ref(false) END ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got bool', 4) enddef def Test_call_lambda_args() --- 1081,1087 ---- Ref = (j) => !j call Ref(false) END ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got bool', 4) enddef def Test_call_lambda_args() *************** *** 1093,1134 **** assert_equal('xyz', ((a: string): string => a)('xyz')) END ! CheckDefAndScriptSuccess(lines) ! CheckDefFailure(['echo ((i) => 0)()'], 'E119: Not enough arguments for function: ((i) => 0)()') lines =<< trim END var Ref = (x: number, y: number) => x + y echo Ref(1, 'x') END ! CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got string') lines =<< trim END var Ref: func(job, string, number) Ref = (x, y) => 0 END ! CheckDefAndScriptFailure(lines, 'E1012:') lines =<< trim END var Ref: func(job, string) Ref = (x, y, z) => 0 END ! CheckDefAndScriptFailure(lines, 'E1012:') lines =<< trim END var one = 1 var l = [1, 2, 3] echo map(l, (one) => one) END ! CheckDefFailure(lines, 'E1167:') ! CheckScriptFailure(['vim9script'] + lines, 'E1168:') lines =<< trim END var Ref: func(any, ?any): bool Ref = (_, y = 1) => false END ! CheckDefAndScriptFailure(lines, 'E1172:') lines =<< trim END var a = 0 --- 1093,1134 ---- assert_equal('xyz', ((a: string): string => a)('xyz')) END ! v9.CheckDefAndScriptSuccess(lines) ! v9.CheckDefFailure(['echo ((i) => 0)()'], 'E119: Not enough arguments for function: ((i) => 0)()') lines =<< trim END var Ref = (x: number, y: number) => x + y echo Ref(1, 'x') END ! v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got string') lines =<< trim END var Ref: func(job, string, number) Ref = (x, y) => 0 END ! v9.CheckDefAndScriptFailure(lines, 'E1012:') lines =<< trim END var Ref: func(job, string) Ref = (x, y, z) => 0 END ! v9.CheckDefAndScriptFailure(lines, 'E1012:') lines =<< trim END var one = 1 var l = [1, 2, 3] echo map(l, (one) => one) END ! v9.CheckDefFailure(lines, 'E1167:') ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1168:') lines =<< trim END var Ref: func(any, ?any): bool Ref = (_, y = 1) => false END ! v9.CheckDefAndScriptFailure(lines, 'E1172:') lines =<< trim END var a = 0 *************** *** 1138,1144 **** b = (txt =~ 'x' ? 1 : 2) assert_equal(2, b) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END def ShadowLocal() --- 1138,1144 ---- b = (txt =~ 'x' ? 1 : 2) assert_equal(2, b) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END def ShadowLocal() *************** *** 1147,1153 **** echo map(l, (one) => one) enddef END ! CheckDefFailure(lines, 'E1167:') lines =<< trim END def Shadowarg(one: number) --- 1147,1153 ---- echo map(l, (one) => one) enddef END ! v9.CheckDefFailure(lines, 'E1167:') lines =<< trim END def Shadowarg(one: number) *************** *** 1155,1172 **** echo map(l, (one) => one) enddef END ! CheckDefFailure(lines, 'E1167:') lines =<< trim END echo ((a) => a)('aa', 'bb') END ! CheckDefAndScriptFailure(lines, 'E118:', 1) lines =<< trim END echo 'aa'->((a) => a)('bb') END ! CheckDefFailure(lines, 'E118: Too many arguments for function: ->((a) => a)(''bb'')', 1) ! CheckScriptFailure(['vim9script'] + lines, 'E118: Too many arguments for function: ', 2) enddef def Test_lambda_line_nr() --- 1155,1172 ---- echo map(l, (one) => one) enddef END ! v9.CheckDefFailure(lines, 'E1167:') lines =<< trim END echo ((a) => a)('aa', 'bb') END ! v9.CheckDefAndScriptFailure(lines, 'E118:', 1) lines =<< trim END echo 'aa'->((a) => a)('bb') END ! v9.CheckDefFailure(lines, 'E118: Too many arguments for function: ->((a) => a)(''bb'')', 1) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E118: Too many arguments for function: ', 2) enddef def Test_lambda_line_nr() *************** *** 1180,1186 **** ->substitute("('\\|')", ' ', 'g')) assert_match('Last set from .* line 4', out) END ! CheckScriptSuccess(lines) enddef def FilterWithCond(x: string, Cond: func(string): bool): bool --- 1180,1186 ---- ->substitute("('\\|')", ' ', 'g')) assert_match('Last set from .* line 4', out) END ! v9.CheckScriptSuccess(lines) enddef def FilterWithCond(x: string, Cond: func(string): bool): bool *************** *** 1191,1214 **** var lines =<< trim END var Ref = (): => 123 END ! CheckDefAndScriptFailure(lines, 'E1157:', 1) # no space before the return type lines =<< trim END var Ref = (x):number => x + 1 END ! CheckDefAndScriptFailure(lines, 'E1069:', 1) # this works for x in ['foo', 'boo'] ! echo FilterWithCond(x, (v) => v =~ '^b') endfor # this fails lines =<< trim END ! echo FilterWithCond('foo', (v) => v .. '^b') END ! CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected func(string): bool but got func(any): string', 1) lines =<< trim END var Lambda1 = (x) => { --- 1191,1214 ---- var lines =<< trim END var Ref = (): => 123 END ! v9.CheckDefAndScriptFailure(lines, 'E1157:', 1) # no space before the return type lines =<< trim END var Ref = (x):number => x + 1 END ! v9.CheckDefAndScriptFailure(lines, 'E1069:', 1) # this works for x in ['foo', 'boo'] ! echo g:FilterWithCond(x, (v) => v =~ '^b') endfor # this fails lines =<< trim END ! echo g:FilterWithCond('foo', (v) => v .. '^b') END ! v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected func(string): bool but got func(any): string', 1) lines =<< trim END var Lambda1 = (x) => { *************** *** 1220,1226 **** } assert_equal('foo', Lambda2('foo')) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var Lambda = (x): string => { --- 1220,1226 ---- } assert_equal('foo', Lambda2('foo')) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var Lambda = (x): string => { *************** *** 1228,1238 **** } echo Lambda(['foo']) END ! CheckDefExecAndScriptFailure(lines, 'E1012:') enddef def Test_lambda_uses_assigned_var() ! CheckDefSuccess([ 'var x: any = "aaa"' 'x = filter(["bbb"], (_, v) => v =~ x)']) enddef --- 1228,1238 ---- } echo Lambda(['foo']) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1012:') enddef def Test_lambda_uses_assigned_var() ! v9.CheckDefSuccess([ 'var x: any = "aaa"' 'x = filter(["bbb"], (_, v) => v =~ x)']) enddef *************** *** 1247,1253 **** enddef Foo() END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1247,1253 ---- enddef Foo() END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1261,1267 **** legacy call g:TestFunc({nr -> 0}) delfunc g:TestFunc END ! CheckScriptSuccess(lines) enddef def Test_lambda_in_reduce_line_break() --- 1261,1267 ---- legacy call g:TestFunc({nr -> 0}) delfunc g:TestFunc END ! v9.CheckScriptSuccess(lines) enddef def Test_lambda_in_reduce_line_break() *************** *** 1281,1287 **** }, {}) assert_equal({Bob: 2, Sam: 1, Cat: 3}, result) END ! CheckScriptSuccess(lines) enddef def Test_set_opfunc_to_lambda() --- 1281,1287 ---- }, {}) assert_equal({Bob: 2, Sam: 1, Cat: 3}, result) END ! v9.CheckScriptSuccess(lines) enddef def Test_set_opfunc_to_lambda() *************** *** 1303,1309 **** assert_equal(4, g:result) bwipe! END ! CheckScriptSuccess(lines) enddef def Test_set_opfunc_to_global_function() --- 1303,1309 ---- assert_equal(4, g:result) bwipe! END ! v9.CheckScriptSuccess(lines) enddef def Test_set_opfunc_to_global_function() *************** *** 1333,1339 **** bwipe! END ! CheckScriptSuccess(lines) &operatorfunc = '' enddef --- 1333,1339 ---- bwipe! END ! v9.CheckScriptSuccess(lines) &operatorfunc = '' enddef *************** *** 1346,1352 **** var Fn = s:Getit assert_equal('it', Fn()) END ! CheckScriptSuccess(lines) enddef def Test_lambda_type_allocated() --- 1346,1352 ---- var Fn = s:Getit assert_equal('it', Fn()) END ! v9.CheckScriptSuccess(lines) enddef def Test_lambda_type_allocated() *************** *** 1365,1371 **** &omnifunc = string(Lambda) Lambda = (a, b) => strlen(a) END ! CheckScriptSuccess(lines) enddef " Default arg and varargs --- 1365,1371 ---- &omnifunc = string(Lambda) Lambda = (a, b) => strlen(a) END ! v9.CheckScriptSuccess(lines) enddef " Default arg and varargs *************** *** 1378,1390 **** enddef def Test_call_def_varargs() ! assert_fails('MyDefVarargs()', 'E119:', '', 1, 'Test_call_def_varargs') ! MyDefVarargs('one')->assert_equal('one,foo') ! MyDefVarargs('one', 'two')->assert_equal('one,two') ! MyDefVarargs('one', 'two', 'three')->assert_equal('one,two,three') ! CheckDefFailure(['MyDefVarargs("one", 22)'], 'E1013: Argument 2: type mismatch, expected string but got number') ! CheckDefFailure(['MyDefVarargs("one", "two", 123)'], 'E1013: Argument 3: type mismatch, expected string but got number') var lines =<< trim END --- 1378,1390 ---- enddef def Test_call_def_varargs() ! assert_fails('g:MyDefVarargs()', 'E119:', '', 1, 'Test_call_def_varargs') ! g:MyDefVarargs('one')->assert_equal('one,foo') ! g:MyDefVarargs('one', 'two')->assert_equal('one,two') ! g:MyDefVarargs('one', 'two', 'three')->assert_equal('one,two,three') ! v9.CheckDefFailure(['g:MyDefVarargs("one", 22)'], 'E1013: Argument 2: type mismatch, expected string but got number') ! v9.CheckDefFailure(['g:MyDefVarargs("one", "two", 123)'], 'E1013: Argument 3: type mismatch, expected string but got number') var lines =<< trim END *************** *** 1394,1400 **** enddef Func('a', 'b', 'c') END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1394,1400 ---- enddef Func('a', 'b', 'c') END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1403,1409 **** enddef Func() END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1403,1409 ---- enddef Func() END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1412,1418 **** enddef Func(0) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1412,1418 ---- enddef Func(0) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1421,1427 **** enddef Func(0) END ! CheckScriptFailure(lines, 'E1180:', 2) lines =<< trim END vim9script --- 1421,1427 ---- enddef Func(0) END ! v9.CheckScriptFailure(lines, 'E1180:', 2) lines =<< trim END vim9script *************** *** 1430,1436 **** enddef Func('a', 'b', 'c') END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1430,1436 ---- enddef Func('a', 'b', 'c') END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1439,1445 **** enddef Func(1, 2, 3) END ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch') lines =<< trim END vim9script --- 1439,1445 ---- enddef Func(1, 2, 3) END ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch') lines =<< trim END vim9script *************** *** 1448,1454 **** enddef Func('a', 9) END ! CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch') lines =<< trim END vim9script --- 1448,1454 ---- enddef Func('a', 9) END ! v9.CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch') lines =<< trim END vim9script *************** *** 1457,1463 **** enddef Func(1, 'a') END ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch') lines =<< trim END vim9script --- 1457,1463 ---- enddef Func(1, 'a') END ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch') lines =<< trim END vim9script *************** *** 1467,1473 **** echo l enddef END ! CheckScriptFailure(lines, 'E1160:') lines =<< trim END vim9script --- 1467,1473 ---- echo l enddef END ! v9.CheckScriptFailure(lines, 'E1160:') lines =<< trim END vim9script *************** *** 1479,1485 **** enddef DoIt() END ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got string') enddef let s:value = '' --- 1479,1485 ---- enddef DoIt() END ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected number but got string') enddef let s:value = '' *************** *** 1510,1517 **** RefDef2Arg(99)->assert_equal('99text') RefDef2Arg(77, 'some')->assert_equal('77some') ! CheckDefFailure(['var RefWrong: func(string?)'], 'E1010:') ! CheckDefFailure(['var RefWrong: func(?string, string)'], 'E1007:') var RefVarargs: func(...list): string RefVarargs = FuncVarargs --- 1510,1517 ---- RefDef2Arg(99)->assert_equal('99text') RefDef2Arg(77, 'some')->assert_equal('77some') ! v9.CheckDefFailure(['var RefWrong: func(string?)'], 'E1010:') ! v9.CheckDefFailure(['var RefWrong: func(?string, string)'], 'E1007:') var RefVarargs: func(...list): string RefVarargs = FuncVarargs *************** *** 1519,1526 **** RefVarargs('one')->assert_equal('one') RefVarargs('one', 'two')->assert_equal('one,two') ! CheckDefFailure(['var RefWrong: func(...list, string)'], 'E110:') ! CheckDefFailure(['var RefWrong: func(...list, ?string)'], 'E110:') enddef " Only varargs --- 1519,1526 ---- RefVarargs('one')->assert_equal('one') RefVarargs('one', 'two')->assert_equal('one,two') ! v9.CheckDefFailure(['var RefWrong: func(...list, string)'], 'E110:') ! v9.CheckDefFailure(['var RefWrong: func(...list, ?string)'], 'E110:') enddef " Only varargs *************** *** 1529,1539 **** enddef def Test_call_varargs_only() ! MyVarargsOnly()->assert_equal('') ! MyVarargsOnly('one')->assert_equal('one') ! MyVarargsOnly('one', 'two')->assert_equal('one,two') ! CheckDefFailure(['MyVarargsOnly(1)'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['MyVarargsOnly("one", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number') enddef def Test_using_var_as_arg() --- 1529,1539 ---- enddef def Test_call_varargs_only() ! g:MyVarargsOnly()->assert_equal('') ! g:MyVarargsOnly('one')->assert_equal('one') ! g:MyVarargsOnly('one', 'two')->assert_equal('one,two') ! v9.CheckDefFailure(['g:MyVarargsOnly(1)'], 'E1013: Argument 1: type mismatch, expected string but got number') ! v9.CheckDefFailure(['g:MyVarargsOnly("one", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number') enddef def Test_using_var_as_arg() *************** *** 1542,1548 **** var x = 234 enddef END ! CheckDefFailure(lines, 'E1006:') lines =<< trim END def Func(Ref: number) --- 1542,1548 ---- var x = 234 enddef END ! v9.CheckDefFailure(lines, 'E1006:') lines =<< trim END def Func(Ref: number) *************** *** 1550,1563 **** enddef enddef END ! CheckDefFailure(lines, 'E1073:') enddef ! def DictArg(arg: dict) arg['key'] = 'value' enddef ! def ListArg(arg: list) arg[0] = 'value' enddef --- 1550,1563 ---- enddef enddef END ! v9.CheckDefFailure(lines, 'E1073:') enddef ! def s:DictArg(arg: dict) arg['key'] = 'value' enddef ! def s:ListArg(arg: list) arg[0] = 'value' enddef *************** *** 1570,1581 **** ListArg(l) l[0]->assert_equal('value') ! CheckScriptFailure(['def Func(arg: number)', 'arg = 3', 'enddef', 'defcompile'], 'E1090:') delfunc! g:Func enddef " These argument names are reserved in legacy functions. ! def WithReservedNames(firstline: string, lastline: string): string return firstline .. lastline enddef --- 1570,1581 ---- ListArg(l) l[0]->assert_equal('value') ! v9.CheckScriptFailure(['def Func(arg: number)', 'arg = 3', 'enddef', 'defcompile'], 'E1090:') delfunc! g:Func enddef " These argument names are reserved in legacy functions. ! def s:WithReservedNames(firstline: string, lastline: string): string return firstline .. lastline enddef *************** *** 1605,1611 **** var Funcref: func: number = function('RetNumber') Funcref()->assert_equal(123) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1605,1611 ---- var Funcref: func: number = function('RetNumber') Funcref()->assert_equal(123) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1618,1624 **** var Funcref = function('RetNumber') Bar(Funcref)->assert_equal(123) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1618,1624 ---- var Funcref = function('RetNumber') Bar(Funcref)->assert_equal(123) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1628,1634 **** var Funcref: func(number) = function('UseNumber') Funcref(123) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1628,1634 ---- var Funcref: func(number) = function('UseNumber') Funcref(123) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1637,1643 **** enddef var Funcref: func(string) = function('UseNumber') END ! CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(string) but got func(number)') lines =<< trim END vim9script --- 1637,1643 ---- enddef var Funcref: func(string) = function('UseNumber') END ! v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(string) but got func(number)') lines =<< trim END vim9script *************** *** 1650,1656 **** Funcref(123) g:echo->assert_equal(123) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1650,1656 ---- Funcref(123) g:echo->assert_equal(123) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1663,1669 **** Funcref(1, 2, 3) g:echo->assert_equal([1, 2, 3]) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1663,1669 ---- Funcref(1, 2, 3) g:echo->assert_equal([1, 2, 3]) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1685,1691 **** g:optarg->assert_equal(18) g:listarg->assert_equal([1, 2, 3]) END ! CheckScriptSuccess(lines) enddef let SomeFunc = function('len') --- 1685,1691 ---- g:optarg->assert_equal(18) g:listarg->assert_equal([1, 2, 3]) END ! v9.CheckScriptSuccess(lines) enddef let SomeFunc = function('len') *************** *** 1741,1747 **** # Compile all functions defcompile END ! CheckScriptFailure(lines, 'E1173: Text found after enddef: BBBB') enddef def Test_nested_function_with_args_split() --- 1741,1747 ---- # Compile all functions defcompile END ! v9.CheckScriptFailure(lines, 'E1173: Text found after enddef: BBBB') enddef def Test_nested_function_with_args_split() *************** *** 1758,1764 **** # Compile all functions defcompile END ! CheckScriptFailure(lines, 'E1173: Text found after enddef: BBBB') lines =<< trim END vim9script --- 1758,1764 ---- # Compile all functions defcompile END ! v9.CheckScriptFailure(lines, 'E1173: Text found after enddef: BBBB') lines =<< trim END vim9script *************** *** 1768,1774 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1173: Text found after endfunction: BBBB') enddef def Test_error_in_function_args() --- 1768,1774 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1173: Text found after endfunction: BBBB') enddef def Test_error_in_function_args() *************** *** 1783,1812 **** # Compile all functions defcompile END ! CheckScriptFailure(lines, 'E488:') enddef def Test_return_type_wrong() ! CheckScriptFailure([ 'def Func(): number', 'return "a"', 'enddef', 'defcompile'], 'expected number but got string') delfunc! g:Func ! CheckScriptFailure([ 'def Func(): string', 'return 1', 'enddef', 'defcompile'], 'expected string but got number') delfunc! g:Func ! CheckScriptFailure([ 'def Func(): void', 'return "a"', 'enddef', 'defcompile'], 'E1096: Returning a value in a function without a return type') delfunc! g:Func ! CheckScriptFailure([ 'def Func()', 'return "a"', 'enddef', --- 1783,1812 ---- # Compile all functions defcompile END ! v9.CheckScriptFailure(lines, 'E488:') enddef def Test_return_type_wrong() ! v9.CheckScriptFailure([ 'def Func(): number', 'return "a"', 'enddef', 'defcompile'], 'expected number but got string') delfunc! g:Func ! v9.CheckScriptFailure([ 'def Func(): string', 'return 1', 'enddef', 'defcompile'], 'expected string but got number') delfunc! g:Func ! v9.CheckScriptFailure([ 'def Func(): void', 'return "a"', 'enddef', 'defcompile'], 'E1096: Returning a value in a function without a return type') delfunc! g:Func ! v9.CheckScriptFailure([ 'def Func()', 'return "a"', 'enddef', *************** *** 1814,1855 **** 'E1096: Returning a value in a function without a return type') delfunc! g:Func ! CheckScriptFailure([ 'def Func(): number', 'return', 'enddef', 'defcompile'], 'E1003:') delfunc! g:Func ! CheckScriptFailure([ 'def Func():number', 'return 123', 'enddef', 'defcompile'], 'E1069:') delfunc! g:Func ! CheckScriptFailure([ 'def Func() :number', 'return 123', 'enddef', 'defcompile'], 'E1059:') delfunc! g:Func ! CheckScriptFailure([ 'def Func() : number', 'return 123', 'enddef', 'defcompile'], 'E1059:') delfunc! g:Func ! CheckScriptFailure(['def Func(): list', 'return []', 'enddef'], 'E1008:') delfunc! g:Func ! CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008:') delfunc! g:Func ! CheckScriptFailure(['def Func()', 'return 1'], 'E1057:') delfunc! g:Func ! CheckScriptFailure([ 'vim9script', 'def FuncB()', ' return 123', --- 1814,1855 ---- 'E1096: Returning a value in a function without a return type') delfunc! g:Func ! v9.CheckScriptFailure([ 'def Func(): number', 'return', 'enddef', 'defcompile'], 'E1003:') delfunc! g:Func ! v9.CheckScriptFailure([ 'def Func():number', 'return 123', 'enddef', 'defcompile'], 'E1069:') delfunc! g:Func ! v9.CheckScriptFailure([ 'def Func() :number', 'return 123', 'enddef', 'defcompile'], 'E1059:') delfunc! g:Func ! v9.CheckScriptFailure([ 'def Func() : number', 'return 123', 'enddef', 'defcompile'], 'E1059:') delfunc! g:Func ! v9.CheckScriptFailure(['def Func(): list', 'return []', 'enddef'], 'E1008:') delfunc! g:Func ! v9.CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008:') delfunc! g:Func ! v9.CheckScriptFailure(['def Func()', 'return 1'], 'E1057:') delfunc! g:Func ! v9.CheckScriptFailure([ 'vim9script', 'def FuncB()', ' return 123', *************** *** 1861,1872 **** enddef def Test_arg_type_wrong() ! CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing ') ! CheckScriptFailure(['def Func4(...)', 'echo "a"', 'enddef'], 'E1055: Missing name after ...') ! CheckScriptFailure(['def Func5(items:string)', 'echo "a"'], 'E1069:') ! CheckScriptFailure(['def Func5(items)', 'echo "a"'], 'E1077:') ! CheckScriptFailure(['def Func6(...x:list)', 'echo "a"', 'enddef'], 'E1069:') ! CheckScriptFailure(['def Func7(...x: int)', 'echo "a"', 'enddef'], 'E1010:') enddef def Test_white_space_before_comma() --- 1861,1872 ---- enddef def Test_arg_type_wrong() ! v9.CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing ') ! v9.CheckScriptFailure(['def Func4(...)', 'echo "a"', 'enddef'], 'E1055: Missing name after ...') ! v9.CheckScriptFailure(['def Func5(items:string)', 'echo "a"'], 'E1069:') ! v9.CheckScriptFailure(['def Func5(items)', 'echo "a"'], 'E1077:') ! v9.CheckScriptFailure(['def Func6(...x:list)', 'echo "a"', 'enddef'], 'E1069:') ! v9.CheckScriptFailure(['def Func7(...x: int)', 'echo "a"', 'enddef'], 'E1010:') enddef def Test_white_space_before_comma() *************** *** 1875,1881 **** def Func(a: number , b: number) enddef END ! CheckScriptFailure(lines, 'E1068:') call assert_fails('vim9cmd echo stridx("a" .. "b" , "a")', 'E1068:') enddef --- 1875,1881 ---- def Func(a: number , b: number) enddef END ! v9.CheckScriptFailure(lines, 'E1068:') call assert_fails('vim9cmd echo stridx("a" .. "b" , "a")', 'E1068:') enddef *************** *** 1885,1891 **** def Func(a: number,b: number) enddef END ! CheckScriptFailure(lines, 'E1069:') # OK in legacy function lines =<< trim END --- 1885,1891 ---- def Func(a: number,b: number) enddef END ! v9.CheckScriptFailure(lines, 'E1069:') # OK in legacy function lines =<< trim END *************** *** 1893,1899 **** func Func(a,b) endfunc END ! CheckScriptSuccess(lines) enddef def Test_vim9script_call() --- 1893,1899 ---- func Func(a,b) endfunc END ! v9.CheckScriptSuccess(lines) enddef def Test_vim9script_call() *************** *** 1998,2004 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1054:') enddef def Test_vim9script_call_fail_type() --- 1998,2004 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1054:') enddef def Test_vim9script_call_fail_type() *************** *** 2009,2015 **** enddef MyFunc(1234) END ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got number') enddef def Test_vim9script_call_fail_const() --- 2009,2015 ---- enddef MyFunc(1234) END ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got number') enddef def Test_vim9script_call_fail_const() *************** *** 2034,2040 **** call Change() unlet g:Aconst END ! CheckScriptFailure(lines, 'E741: Value is locked: Aconst', 2) enddef " Test that inside :function a Python function can be defined, :def is not --- 2034,2040 ---- call Change() unlet g:Aconst END ! v9.CheckScriptFailure(lines, 'E741: Value is locked: Aconst', 2) enddef " Test that inside :function a Python function can be defined, :def is not *************** *** 2056,2062 **** enddef def CallGoneSoon() ! GoneSoon() enddef defcompile --- 2056,2062 ---- enddef def CallGoneSoon() ! g:GoneSoon() enddef defcompile *************** *** 2099,2105 **** timer_start(1000, (_) => feedkeys("\")) sleep 1500m END ! CheckScriptSuccess(lines) nunmap set updatetime& enddef --- 2099,2105 ---- timer_start(1000, (_) => feedkeys("\")) sleep 1500m END ! v9.CheckScriptSuccess(lines) nunmap set updatetime& enddef *************** *** 2167,2200 **** s:funcResult = two enddef ! def FuncOneArgRetString(arg: string): string return arg enddef ! def FuncOneArgRetAny(arg: any): any return arg enddef def Test_func_type() var Ref1: func() s:funcResult = 0 ! Ref1 = FuncNoArgNoRet Ref1() s:funcResult->assert_equal(11) var Ref2: func s:funcResult = 0 ! Ref2 = FuncNoArgNoRet Ref2() s:funcResult->assert_equal(11) s:funcResult = 0 ! Ref2 = FuncOneArgNoRet Ref2(12) s:funcResult->assert_equal(12) s:funcResult = 0 ! Ref2 = FuncNoArgRetNumber Ref2()->assert_equal(1234) s:funcResult->assert_equal(22) --- 2167,2200 ---- s:funcResult = two enddef ! def s:FuncOneArgRetString(arg: string): string return arg enddef ! def s:FuncOneArgRetAny(arg: any): any return arg enddef def Test_func_type() var Ref1: func() s:funcResult = 0 ! Ref1 = g:FuncNoArgNoRet Ref1() s:funcResult->assert_equal(11) var Ref2: func s:funcResult = 0 ! Ref2 = g:FuncNoArgNoRet Ref2() s:funcResult->assert_equal(11) s:funcResult = 0 ! Ref2 = g:FuncOneArgNoRet Ref2(12) s:funcResult->assert_equal(12) s:funcResult = 0 ! Ref2 = g:FuncNoArgRetNumber Ref2()->assert_equal(1234) s:funcResult->assert_equal(22) *************** *** 2229,2279 **** def Test_func_type_part() var RefVoid: func: void ! RefVoid = FuncNoArgNoRet ! RefVoid = FuncOneArgNoRet ! CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number') ! CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string') var RefAny: func(): any ! RefAny = FuncNoArgRetNumber RefAny = FuncNoArgRetString ! CheckDefFailure(['var RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()') ! CheckDefFailure(['var RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)') var RefAnyNoArgs: func: any = RefAny var RefNr: func: number ! RefNr = FuncNoArgRetNumber RefNr = FuncOneArgRetNumber ! CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()') ! CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string') var RefStr: func: string RefStr = FuncNoArgRetString RefStr = FuncOneArgRetString ! CheckDefFailure(['var RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()') ! CheckDefFailure(['var RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number') enddef def Test_func_type_fails() ! CheckDefFailure(['var ref1: func()'], 'E704:') ! CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number') ! CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)') ! CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number') ! CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)') ! CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)') ! CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)') ! ! CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:') ! CheckDefFailure(['var RefWrong: func(string,number)'], 'E1069:') ! CheckDefFailure(['var RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:') ! CheckDefFailure(['var RefWrong: func(bool):string'], 'E1069:') enddef def Test_func_return_type() var nr: number ! nr = FuncNoArgRetNumber() nr->assert_equal(1234) nr = FuncOneArgRetAny(122) --- 2229,2279 ---- def Test_func_type_part() var RefVoid: func: void ! RefVoid = g:FuncNoArgNoRet ! RefVoid = g:FuncOneArgNoRet ! v9.CheckDefFailure(['var RefVoid: func: void', 'RefVoid = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number') ! v9.CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string') var RefAny: func(): any ! RefAny = g:FuncNoArgRetNumber RefAny = FuncNoArgRetString ! v9.CheckDefFailure(['var RefAny: func(): any', 'RefAny = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()') ! v9.CheckDefFailure(['var RefAny: func(): any', 'RefAny = g:FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)') var RefAnyNoArgs: func: any = RefAny var RefNr: func: number ! RefNr = g:FuncNoArgRetNumber RefNr = FuncOneArgRetNumber ! v9.CheckDefFailure(['var RefNr: func: number', 'RefNr = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()') ! v9.CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string') var RefStr: func: string RefStr = FuncNoArgRetString RefStr = FuncOneArgRetString ! v9.CheckDefFailure(['var RefStr: func: string', 'RefStr = g:FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()') ! v9.CheckDefFailure(['var RefStr: func: string', 'RefStr = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number') enddef def Test_func_type_fails() ! v9.CheckDefFailure(['var ref1: func()'], 'E704:') ! v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number') ! v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)') ! v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number') ! v9.CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)') ! v9.CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)') ! v9.CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)') ! ! v9.CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:') ! v9.CheckDefFailure(['var RefWrong: func(string,number)'], 'E1069:') ! v9.CheckDefFailure(['var RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:') ! v9.CheckDefFailure(['var RefWrong: func(bool):string'], 'E1069:') enddef def Test_func_return_type() var nr: number ! nr = g:FuncNoArgRetNumber() nr->assert_equal(1234) nr = FuncOneArgRetAny(122) *************** *** 2283,2289 **** str = FuncOneArgRetAny('yes') str->assert_equal('yes') ! CheckDefFailure(['var str: string', 'str = FuncNoArgRetNumber()'], 'E1012: Type mismatch; expected string but got number') enddef def Test_func_common_type() --- 2283,2289 ---- str = FuncOneArgRetAny('yes') str->assert_equal('yes') ! v9.CheckDefFailure(['var str: string', 'str = g:FuncNoArgRetNumber()'], 'E1012: Type mismatch; expected string but got number') enddef def Test_func_common_type() *************** *** 2302,2308 **** assert_equal(7, list[2](3, 'word')) enddef ! def MultiLine( arg1: string, arg2 = 1234, ...rest: list --- 2302,2308 ---- assert_equal(7, list[2](3, 'word')) enddef ! def s:MultiLine( arg1: string, arg2 = 1234, ...rest: list *************** *** 2326,2335 **** enddef func Test_multiline_not_vim9() ! call MultiLine('text')->assert_equal('text1234') ! call MultiLine('text', 777)->assert_equal('text777') ! call MultiLine('text', 777, 'one')->assert_equal('text777one') ! call MultiLine('text', 777, 'one', 'two')->assert_equal('text777one-two') endfunc --- 2326,2335 ---- enddef func Test_multiline_not_vim9() ! call s:MultiLine('text')->assert_equal('text1234') ! call s:MultiLine('text', 777)->assert_equal('text777') ! call s:MultiLine('text', 777, 'one')->assert_equal('text777one') ! call s:MultiLine('text', 777, 'one', 'two')->assert_equal('text777one-two') endfunc *************** *** 2426,2444 **** enddef def Test_deleted_function() ! CheckDefExecFailure([ 'var RefMe: func = function("g:DelMe")', 'delfunc g:DelMe', 'echo RefMe()'], 'E117:') enddef def Test_unknown_function() ! CheckDefExecFailure([ 'var Ref: func = function("NotExist")', 'delfunc g:NotExist'], 'E700:') enddef ! def RefFunc(Ref: func(any): any): string return Ref('more') enddef --- 2426,2444 ---- enddef def Test_deleted_function() ! v9.CheckDefExecFailure([ 'var RefMe: func = function("g:DelMe")', 'delfunc g:DelMe', 'echo RefMe()'], 'E117:') enddef def Test_unknown_function() ! v9.CheckDefExecFailure([ 'var Ref: func = function("NotExist")', 'delfunc g:NotExist'], 'E700:') enddef ! def s:RefFunc(Ref: func(any): any): string return Ref('more') enddef *************** *** 2447,2453 **** RefFunc((s) => local .. s)->assert_equal('some more') enddef ! def MakeRef() var local = 'some ' g:Ref = (s) => local .. s enddef --- 2447,2453 ---- RefFunc((s) => local .. s)->assert_equal('some more') enddef ! def s:MakeRef() var local = 'some ' g:Ref = (s) => local .. s enddef *************** *** 2458,2464 **** unlet g:Ref enddef ! def MakeTwoRefs() var local = ['some'] g:Extend = (s) => local->add(s) g:Read = () => local --- 2458,2464 ---- unlet g:Ref enddef ! def s:MakeTwoRefs() var local = ['some'] g:Extend = (s) => local->add(s) g:Read = () => local *************** *** 2476,2486 **** unlet g:Read enddef ! def ReadRef(Ref: func(): list): string return join(Ref(), ' ') enddef ! def ExtendRef(Ref: func(string): list, add: string) Ref(add) enddef --- 2476,2486 ---- unlet g:Read enddef ! def s:ReadRef(Ref: func(): list): string return join(Ref(), ' ') enddef ! def s:ExtendRef(Ref: func(string): list, add: string) Ref(add) enddef *************** *** 2496,2507 **** unlet g:Read enddef ! def MakeArgRefs(theArg: string) var local = 'loc_val' g:UseArg = (s) => theArg .. '/' .. local .. '/' .. s enddef ! def MakeArgRefsVarargs(theArg: string, ...rest: list) var local = 'the_loc' g:UseVararg = (s) => theArg .. '/' .. local .. '/' .. s .. '/' .. join(rest) enddef --- 2496,2507 ---- unlet g:Read enddef ! def s:MakeArgRefs(theArg: string) var local = 'loc_val' g:UseArg = (s) => theArg .. '/' .. local .. '/' .. s enddef ! def s:MakeArgRefsVarargs(theArg: string, ...rest: list) var local = 'the_loc' g:UseVararg = (s) => theArg .. '/' .. local .. '/' .. s .. '/' .. join(rest) enddef *************** *** 2526,2535 **** enddef assert_equal([3, 4, 5], Test(Inc)) END ! CheckScriptSuccess(lines) enddef ! def MakeGetAndAppendRefs() var local = 'a' def Append(arg: string) --- 2526,2535 ---- enddef assert_equal([3, 4, 5], Test(Inc)) END ! v9.CheckScriptSuccess(lines) enddef ! def s:MakeGetAndAppendRefs() var local = 'a' def Append(arg: string) *************** *** 2563,2569 **** Closure('!!!')->assert_equal('text!!!') enddef ! func GetResult(Ref) return a:Ref('some') endfunc --- 2563,2569 ---- Closure('!!!')->assert_equal('text!!!') enddef ! func s:GetResult(Ref) return a:Ref('some') endfunc *************** *** 2584,2590 **** enddef Func() END ! CheckScriptSuccess(lines) enddef def Test_nested_closure_used() --- 2584,2590 ---- enddef Func() END ! v9.CheckScriptSuccess(lines) enddef def Test_nested_closure_used() *************** *** 2598,2604 **** Func() assert_equal('hello', g:Myclosure()) END ! CheckScriptSuccess(lines) enddef def Test_nested_closure_fails() --- 2598,2604 ---- Func() assert_equal('hello', g:Myclosure()) END ! v9.CheckScriptSuccess(lines) enddef def Test_nested_closure_fails() *************** *** 2612,2618 **** enddef FuncA() END ! CheckScriptFailure(lines, 'E1012:') enddef def Test_global_closure() --- 2612,2618 ---- enddef FuncA() END ! v9.CheckScriptFailure(lines, 'E1012:') enddef def Test_global_closure() *************** *** 2632,2638 **** repeat(['aaa', 'bbb', 'ccc'], 3)->setline(1) ReverseEveryNLines(3, 1, 9) END ! CheckScriptSuccess(lines) var expected = repeat(['ccc', 'bbb', 'aaa'], 3) assert_equal(expected, getline(1, 9)) bwipe! --- 2632,2638 ---- repeat(['aaa', 'bbb', 'ccc'], 3)->setline(1) ReverseEveryNLines(3, 1, 9) END ! v9.CheckScriptSuccess(lines) var expected = repeat(['ccc', 'bbb', 'aaa'], 3) assert_equal(expected, getline(1, 9)) bwipe! *************** *** 2653,2659 **** enddef Outer() END ! CheckScriptSuccess(lines) delfunc g:Inner enddef --- 2653,2659 ---- enddef Outer() END ! v9.CheckScriptSuccess(lines) delfunc g:Inner enddef *************** *** 2669,2675 **** enddef Func() END ! CheckScriptFailure(lines, 'E1248') enddef def Test_failure_in_called_function() --- 2669,2675 ---- enddef Func() END ! v9.CheckScriptFailure(lines, 'E1248') enddef def Test_failure_in_called_function() *************** *** 2692,2698 **** endtry au! TerminalWinOpen END ! CheckScriptSuccess(lines) enddef def Test_nested_lambda() --- 2692,2698 ---- endtry au! TerminalWinOpen END ! v9.CheckScriptSuccess(lines) enddef def Test_nested_lambda() *************** *** 2707,2713 **** enddef Func() END ! CheckScriptSuccess(lines) enddef def Test_double_nested_lambda() --- 2707,2713 ---- enddef Func() END ! v9.CheckScriptSuccess(lines) enddef def Test_double_nested_lambda() *************** *** 2720,2726 **** enddef assert_equal('hello-there', F('hello')('-')('there')) END ! CheckScriptSuccess(lines) enddef def Test_nested_inline_lambda() --- 2720,2726 ---- enddef assert_equal('hello-there', F('hello')('-')('there')) END ! v9.CheckScriptSuccess(lines) enddef def Test_nested_inline_lambda() *************** *** 2733,2739 **** enddef assert_equal('--there++', F('++')('there')('--')) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 2733,2739 ---- enddef assert_equal('--there++', F('++')('there')('--')) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 2743,2749 **** }) }) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 2743,2749 ---- }) }) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 2759,2765 **** defcomp END ! CheckScriptSuccess(lines) enddef def Shadowed(): list --- 2759,2765 ---- defcomp END ! v9.CheckScriptSuccess(lines) enddef def Shadowed(): list *************** *** 2768,2777 **** enddef def Test_lambda_arg_shadows_func() ! assert_equal([42], Shadowed()) enddef ! def Line_continuation_in_def(dir: string = ''): string var path: string = empty(dir) \ ? 'empty' \ : 'full' --- 2768,2777 ---- enddef def Test_lambda_arg_shadows_func() ! assert_equal([42], g:Shadowed()) enddef ! def s:Line_continuation_in_def(dir: string = ''): string var path: string = empty(dir) \ ? 'empty' \ : 'full' *************** *** 2788,2797 **** var script = 'test' assert_equal(['test'], map(['one'], (_, _) => script)) END ! CheckScriptSuccess(lines) enddef ! def Line_continuation_in_lambda(): list var x = range(97, 100) ->mapnew((_, v) => nr2char(v) ->toupper()) --- 2788,2797 ---- var script = 'test' assert_equal(['test'], map(['one'], (_, _) => script)) END ! v9.CheckScriptSuccess(lines) enddef ! def s:Line_continuation_in_lambda(): list var x = range(97, 100) ->mapnew((_, v) => nr2char(v) ->toupper()) *************** *** 2812,2818 **** )) assert_equal(['1:2:yyy'], res) END ! CheckScriptSuccess(lines) enddef def Test_list_lambda() --- 2812,2818 ---- )) assert_equal(['1:2:yyy'], res) END ! v9.CheckScriptSuccess(lines) enddef def Test_list_lambda() *************** *** 2834,2840 **** flist[i] = () => inloop endfor END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 2834,2840 ---- flist[i] = () => inloop endfor END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 2846,2852 **** endfor endif END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 2846,2852 ---- endfor endif END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 2858,2864 **** flist[i] = () => outloop endfor END ! CheckScriptFailure(lines, 'E1001: Variable not found: outloop', 1) lines =<< trim END vim9script --- 2858,2864 ---- flist[i] = () => outloop endfor END ! v9.CheckScriptFailure(lines, 'E1001: Variable not found: outloop', 1) lines =<< trim END vim9script *************** *** 2867,2873 **** endfor assert_equal(0, ((i) => 0)(0)) END ! CheckScriptSuccess(lines) enddef def Test_legacy_lambda() --- 2867,2873 ---- endfor assert_equal(0, ((i) => 0)(0)) END ! v9.CheckScriptSuccess(lines) enddef def Test_legacy_lambda() *************** *** 2876,2882 **** var lines =<< trim END echo {x -> 'hello ' .. x}('foo') END ! CheckDefAndScriptFailure(lines, 'E720:') lines =<< trim END vim9script --- 2876,2882 ---- var lines =<< trim END echo {x -> 'hello ' .. x}('foo') END ! v9.CheckDefAndScriptFailure(lines, 'E720:') lines =<< trim END vim9script *************** *** 2885,2891 **** enddef legacy call s:Func() END ! CheckScriptSuccess(lines) enddef def Test_legacy() --- 2885,2891 ---- enddef legacy call s:Func() END ! v9.CheckScriptSuccess(lines) enddef def Test_legacy() *************** *** 2902,2908 **** unlet g:legacyvar delfunc g:LegacyFunction END ! CheckScriptSuccess(lines) enddef def Test_legacy_errors() --- 2902,2908 ---- unlet g:legacyvar delfunc g:LegacyFunction END ! v9.CheckScriptSuccess(lines) enddef def Test_legacy_errors() *************** *** 2910,2916 **** 'for', 'endfor', 'continue', 'break', 'while', 'endwhile', 'try', 'catch', 'finally', 'endtry'] ! CheckDefFailure(['legacy ' .. cmd .. ' expr'], 'E1189:') endfor enddef --- 2910,2916 ---- 'for', 'endfor', 'continue', 'break', 'while', 'endwhile', 'try', 'catch', 'finally', 'endtry'] ! v9.CheckDefFailure(['legacy ' .. cmd .. ' expr'], 'E1189:') endfor enddef *************** *** 2942,2951 **** assert_equal('bar', g:result) unlet g:result END ! CheckScriptSuccess(lines) enddef ! def DoFilterThis(a: string): list # closure nested inside another closure using argument var Filter = (l) => filter(l, (_, v) => stridx(v, a) == 0) return ['x', 'y', 'a', 'x2', 'c']->Filter() --- 2942,2951 ---- assert_equal('bar', g:result) unlet g:result END ! v9.CheckScriptSuccess(lines) enddef ! def s:DoFilterThis(a: string): list # closure nested inside another closure using argument var Filter = (l) => filter(l, (_, v) => stridx(v, a) == 0) return ['x', 'y', 'a', 'x2', 'c']->Filter() *************** *** 2978,2989 **** writefile(lines, 'XTest_silent_echo') # Check that the balloon shows up after a mouse move ! var buf = RunVimInTerminal('-S XTest_silent_echo', {'rows': 6}) term_sendkeys(buf, ":abc") ! VerifyScreenDump(buf, 'Test_vim9_silent_echo', {}) # clean up ! StopVimInTerminal(buf) delete('XTest_silent_echo') enddef --- 2978,2989 ---- writefile(lines, 'XTest_silent_echo') # Check that the balloon shows up after a mouse move ! var buf = g:RunVimInTerminal('-S XTest_silent_echo', {'rows': 6}) term_sendkeys(buf, ":abc") ! g:VerifyScreenDump(buf, 'Test_vim9_silent_echo', {}) # clean up ! g:StopVimInTerminal(buf) delete('XTest_silent_echo') enddef *************** *** 2992,2998 **** g:did_it = 'yes' enddef ! func UserError() silent! invalid endfunc --- 2992,2998 ---- g:did_it = 'yes' enddef ! func s:UserError() silent! invalid endfunc *************** *** 3028,3037 **** popup_create('popup', {filter: Filter}) feedkeys("o\r", 'xnt') END ! CheckScriptSuccess(lines) enddef ! def Fibonacci(n: number): number if n < 2 return n else --- 3028,3037 ---- popup_create('popup', {filter: Filter}) feedkeys("o\r", 'xnt') END ! v9.CheckScriptSuccess(lines) enddef ! def s:Fibonacci(n: number): number if n < 2 return n else *************** *** 3043,3049 **** Fibonacci(20)->assert_equal(6765) enddef ! def TreeWalk(dir: string): list return readdir(dir)->mapnew((_, val) => fnamemodify(dir .. '/' .. val, ':p')->isdirectory() ? {[val]: TreeWalk(dir .. '/' .. val)} --- 3043,3049 ---- Fibonacci(20)->assert_equal(6765) enddef ! def s:TreeWalk(dir: string): list return readdir(dir)->mapnew((_, val) => fnamemodify(dir .. '/' .. val, ':p')->isdirectory() ? {[val]: TreeWalk(dir .. '/' .. val)} *************** *** 3067,3091 **** vim9script def s: list END ! CheckScriptFailure(lines, 'E129:') lines =<< trim END vim9script def g: list END ! CheckScriptFailure(lines, 'E129:') lines =<< trim END vim9script def : list END ! CheckScriptFailure(lines, 'E884:') lines =<< trim END vim9script def F list END ! CheckScriptFailure(lines, 'E488:') enddef def Test_partial_call() --- 3067,3091 ---- vim9script def s: list END ! v9.CheckScriptFailure(lines, 'E129:') lines =<< trim END vim9script def g: list END ! v9.CheckScriptFailure(lines, 'E129:') lines =<< trim END vim9script def : list END ! v9.CheckScriptFailure(lines, 'E884:') lines =<< trim END vim9script def F list END ! v9.CheckScriptFailure(lines, 'E488:') enddef def Test_partial_call() *************** *** 3113,3119 **** var RepeatFunc = function('repeat', ['o']) assert_equal('ooooo', RepeatFunc(5)) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END vim9script --- 3113,3119 ---- var RepeatFunc = function('repeat', ['o']) assert_equal('ooooo', RepeatFunc(5)) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END vim9script *************** *** 3122,3133 **** var Expr: func(dict): dict const Call = Foo(Expr) END ! CheckScriptFailure(lines, 'E1235:') enddef def Test_cmd_modifier() tab echo '0' ! CheckDefFailure(['5tab echo 3'], 'E16:') enddef def Test_restore_modifiers() --- 3122,3133 ---- var Expr: func(dict): dict const Call = Foo(Expr) END ! v9.CheckScriptFailure(lines, 'E1235:') enddef def Test_cmd_modifier() tab echo '0' ! v9.CheckDefFailure(['5tab echo 3'], 'E16:') enddef def Test_restore_modifiers() *************** *** 3146,3152 **** endfunc Func() END ! CheckScriptSuccess(lines) g:ei_after->assert_equal('') enddef --- 3146,3152 ---- endfunc Func() END ! v9.CheckScriptSuccess(lines) g:ei_after->assert_equal('') enddef *************** *** 3154,3160 **** eval 1 + 2 eval 2 + 3 # call not on fourth line ! StackBot() enddef def StackBot() --- 3154,3160 ---- eval 1 + 2 eval 2 + 3 # call not on fourth line ! g:StackBot() enddef def StackBot() *************** *** 3164,3170 **** def Test_callstack_def() try ! StackTop() catch v:throwpoint->assert_match('Test_callstack_def\[2\]..StackTop\[4\]..StackBot, line 2') endtry --- 3164,3170 ---- def Test_callstack_def() try ! g:StackTop() catch v:throwpoint->assert_match('Test_callstack_def\[2\]..StackTop\[4\]..StackBot, line 2') endtry *************** *** 3185,3191 **** enddef Func() END ! CheckScriptSuccess(lines) enddef def Test_reset_did_emsg() --- 3185,3191 ---- enddef Func() END ! v9.CheckScriptSuccess(lines) enddef def Test_reset_did_emsg() *************** *** 3199,3205 **** enddef Func() END ! CheckScriptFailure(lines, 'E492:', 8) delfunc! g:Func enddef --- 3199,3205 ---- enddef Func() END ! v9.CheckScriptFailure(lines, 'E492:', 8) delfunc! g:Func enddef *************** *** 3236,3242 **** assert_equal('none', g:result) unlet g:result END ! CheckScriptSuccess(lines) enddef def Test_continues_with_silent_error() --- 3236,3242 ---- assert_equal('none', g:result) unlet g:result END ! v9.CheckScriptSuccess(lines) enddef def Test_continues_with_silent_error() *************** *** 3252,3258 **** assert_equal('yes', g:result) unlet g:result END ! CheckScriptSuccess(lines) enddef def Test_abort_even_with_silent() --- 3252,3258 ---- assert_equal('yes', g:result) unlet g:result END ! v9.CheckScriptSuccess(lines) enddef def Test_abort_even_with_silent() *************** *** 3267,3273 **** assert_equal('none', g:result) unlet g:result END ! CheckScriptSuccess(lines) enddef def Test_cmdmod_silent_restored() --- 3267,3273 ---- assert_equal('none', g:result) unlet g:result END ! v9.CheckScriptSuccess(lines) enddef def Test_cmdmod_silent_restored() *************** *** 3315,3321 **** Crash() assert_equal('CbEbEaCa', result) END ! CheckScriptSuccess(lines) enddef def Test_dict_member_with_silent() --- 3315,3321 ---- Crash() assert_equal('CbEbEaCa', result) END ! v9.CheckScriptSuccess(lines) enddef def Test_dict_member_with_silent() *************** *** 3333,3339 **** assert_equal('0', g:result) unlet g:result END ! CheckScriptSuccess(lines) enddef def Test_skip_cmds_with_silent() --- 3333,3339 ---- assert_equal('0', g:result) unlet g:result END ! v9.CheckScriptSuccess(lines) enddef def Test_skip_cmds_with_silent() *************** *** 3351,3357 **** Func(true) END ! CheckScriptSuccess(lines) enddef def Test_opfunc() --- 3351,3357 ---- Func(true) END ! v9.CheckScriptSuccess(lines) enddef def Test_opfunc() *************** *** 3396,3407 **** END call writefile(lines, 'XTest_opfunc_error') ! var buf = RunVimInTerminal('-S XTest_opfunc_error', {rows: 6, wait_for_ruler: 0}) ! WaitForAssert(() => assert_match('Press ENTER', term_getline(buf, 6))) ! WaitForAssert(() => assert_match('E684: list index out of range: 0', term_getline(buf, 5))) # clean up ! StopVimInTerminal(buf) delete('XTest_opfunc_error') enddef --- 3396,3407 ---- END call writefile(lines, 'XTest_opfunc_error') ! var buf = g:RunVimInTerminal('-S XTest_opfunc_error', {rows: 6, wait_for_ruler: 0}) ! g:WaitForAssert(() => assert_match('Press ENTER', term_getline(buf, 6))) ! g:WaitForAssert(() => assert_match('E684: list index out of range: 0', term_getline(buf, 5))) # clean up ! g:StopVimInTerminal(buf) delete('XTest_opfunc_error') enddef *************** *** 3419,3425 **** defcompile # not reached END ! if !RunVim([], lines, '--clean -c WriteDone -c quit') return endif assert_equal(['Done'], readfile('XnestedDone')) --- 3419,3425 ---- defcompile # not reached END ! if !g:RunVim([], lines, '--clean -c WriteDone -c quit') return endif assert_equal(['Done'], readfile('XnestedDone')) *************** *** 3446,3453 **** enddef END ! CheckScriptSuccess(lines + ['echo H(G(F1))']) ! CheckScriptFailure(lines + ['echo H(G(F2))'], 'E1013:') enddef def Test_list_any_type_checked() --- 3446,3453 ---- enddef END ! v9.CheckScriptSuccess(lines + ['echo H(G(F1))']) ! v9.CheckScriptFailure(lines + ['echo H(G(F2))'], 'E1013:') enddef def Test_list_any_type_checked() *************** *** 3462,3474 **** Foo() END lines[2] = 'var l: list' ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) lines[2] = 'var l: list = []' ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) lines[2] = 'var l: list = [11]' ! CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) enddef def Test_compile_error() --- 3462,3474 ---- Foo() END lines[2] = 'var l: list' ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) lines[2] = 'var l: list = []' ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) lines[2] = 'var l: list = [11]' ! v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected list> but got list', 2) enddef def Test_compile_error() *************** *** 3479,3485 **** call g:Broken() END # First call: compilation error ! CheckScriptFailure(lines, 'E1051: Wrong argument type for +') # Second call won't try compiling again assert_fails('call g:Broken()', 'E1091: Function is not compiled: Broken') --- 3479,3485 ---- call g:Broken() END # First call: compilation error ! v9.CheckScriptFailure(lines, 'E1051: Wrong argument type for +') # Second call won't try compiling again assert_fails('call g:Broken()', 'E1091: Function is not compiled: Broken') *************** *** 3492,3498 **** enddef silent! defcompile END ! CheckScriptSuccess(lines) # Calling the function won't try compiling again assert_fails('call g:Broken()', 'E1091: Function is not compiled: Broken') --- 3492,3498 ---- enddef silent! defcompile END ! v9.CheckScriptSuccess(lines) # Calling the function won't try compiling again assert_fails('call g:Broken()', 'E1091: Function is not compiled: Broken') *************** *** 3520,3526 **** assert_equal([[1], [2], [3]], range(3)->mapnew((_, v) => [v]->map((_, w) => w + 1))) END ! CheckScriptSuccess(lines) lines =<< trim END def Ignore(_: string): string --- 3520,3526 ---- assert_equal([[1], [2], [3]], range(3)->mapnew((_, v) => [v]->map((_, w) => w + 1))) END ! v9.CheckScriptSuccess(lines) lines =<< trim END def Ignore(_: string): string *************** *** 3528,3556 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1181:', 1) lines =<< trim END var _ = 1 END ! CheckDefAndScriptFailure(lines, 'E1181:', 1) lines =<< trim END var x = _ END ! CheckDefAndScriptFailure(lines, 'E1181:', 1) enddef def Test_too_many_arguments() var lines =<< trim END echo [0, 1, 2]->map(() => 123) END ! CheckDefExecAndScriptFailure(lines, 'E1106: 2 arguments too many', 1) lines =<< trim END echo [0, 1, 2]->map((_) => 123) END ! CheckDefExecAndScriptFailure(lines, 'E1106: One argument too many', 1) enddef def Test_closing_brace_at_start_of_line() --- 3528,3556 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1181:', 1) lines =<< trim END var _ = 1 END ! v9.CheckDefAndScriptFailure(lines, 'E1181:', 1) lines =<< trim END var x = _ END ! v9.CheckDefAndScriptFailure(lines, 'E1181:', 1) enddef def Test_too_many_arguments() var lines =<< trim END echo [0, 1, 2]->map(() => 123) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1106: 2 arguments too many', 1) lines =<< trim END echo [0, 1, 2]->map((_) => 123) END ! v9.CheckDefExecAndScriptFailure(lines, 'E1106: One argument too many', 1) enddef def Test_closing_brace_at_start_of_line() *************** *** 3560,3569 **** Func( ) END ! call CheckDefAndScriptSuccess(lines) enddef ! func CreateMydict() let g:mydict = {} func g:mydict.afunc() let g:result = self.key --- 3560,3569 ---- Func( ) END ! v9.CheckDefAndScriptSuccess(lines) enddef ! func s:CreateMydict() let g:mydict = {} func g:mydict.afunc() let g:result = self.key *************** *** 3588,3594 **** enddef defcompile END ! CheckScriptFailure(lines, 'E476:') enddef if has('python3') --- 3588,3594 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E476:') enddef if has('python3') *** ../vim-8.2.4256/src/testdir/test_vim9_import.vim 2022-01-25 15:51:52.430855187 +0000 --- src/testdir/test_vim9_import.vim 2022-01-29 19:48:57.381849796 +0000 *************** *** 3,9 **** source check.vim source term_util.vim ! source vim9.vim let s:export_script_lines =<< trim END vim9script --- 3,9 ---- source check.vim source term_util.vim ! import './vim9.vim' as v9 let s:export_script_lines =<< trim END vim9script *************** *** 33,39 **** export var AddRef = AddSome END ! def Undo_export_script_lines() unlet g:result unlet g:localname enddef --- 33,39 ---- export var AddRef = AddSome END ! def s:Undo_export_script_lines() unlet g:result unlet g:localname enddef *************** *** 411,417 **** enddef DoTest() END ! CheckScriptSuccess(lines) delete('Xlib.vim') enddef --- 411,417 ---- enddef DoTest() END ! v9.CheckScriptSuccess(lines) delete('Xlib.vim') enddef *************** *** 422,463 **** import './Xfoo.vim' as foo foo = 'bar' END ! CheckDefAndScriptFailure(lines, ['E1094:', 'E1236: Cannot use foo itself']) lines =<< trim END vim9script import './Xfoo.vim' as foo var that = foo END ! CheckScriptFailure(lines, 'E1060: Expected dot after name: foo') lines =<< trim END vim9script import './Xfoo.vim' as foo var that: any that += foo END ! CheckScriptFailure(lines, 'E1060: Expected dot after name: foo') lines =<< trim END vim9script import './Xfoo.vim' as foo foo += 9 END ! CheckScriptFailure(lines, 'E1060: Expected dot after name: foo') lines =<< trim END vim9script import './Xfoo.vim' as 9foo END ! CheckScriptFailure(lines, 'E1047:') lines =<< trim END vim9script import './Xfoo.vim' as the#foo END ! CheckScriptFailure(lines, 'E1047:') lines =<< trim END vim9script import './Xfoo.vim' as g:foo END ! CheckScriptFailure(lines, 'E1047:') delete('Xfoo.vim') --- 422,463 ---- import './Xfoo.vim' as foo foo = 'bar' END ! v9.CheckDefAndScriptFailure(lines, ['E1094:', 'E1236: Cannot use foo itself']) lines =<< trim END vim9script import './Xfoo.vim' as foo var that = foo END ! v9.CheckScriptFailure(lines, 'E1060: Expected dot after name: foo') lines =<< trim END vim9script import './Xfoo.vim' as foo var that: any that += foo END ! v9.CheckScriptFailure(lines, 'E1060: Expected dot after name: foo') lines =<< trim END vim9script import './Xfoo.vim' as foo foo += 9 END ! v9.CheckScriptFailure(lines, 'E1060: Expected dot after name: foo') lines =<< trim END vim9script import './Xfoo.vim' as 9foo END ! v9.CheckScriptFailure(lines, 'E1047:') lines =<< trim END vim9script import './Xfoo.vim' as the#foo END ! v9.CheckScriptFailure(lines, 'E1047:') lines =<< trim END vim9script import './Xfoo.vim' as g:foo END ! v9.CheckScriptFailure(lines, 'E1047:') delete('Xfoo.vim') *************** *** 474,480 **** import './Xthat.vim' as That That() END ! CheckDefAndScriptFailure(lines, ['E1094:', 'E1236: Cannot use That itself']) lines =<< trim END vim9script --- 474,480 ---- import './Xthat.vim' as That That() END ! v9.CheckDefAndScriptFailure(lines, ['E1094:', 'E1236: Cannot use That itself']) lines =<< trim END vim9script *************** *** 484,496 **** enddef Func() END ! CheckScriptFailure(lines, 'E1236: Cannot use That itself') lines =<< trim END import './Xthat.vim' as one import './Xthat.vim' as two END ! CheckScriptFailure(lines, 'E1262:') delete('Xthat.vim') --- 484,496 ---- enddef Func() END ! v9.CheckScriptFailure(lines, 'E1236: Cannot use That itself') lines =<< trim END import './Xthat.vim' as one import './Xthat.vim' as two END ! v9.CheckScriptFailure(lines, 'E1262:') delete('Xthat.vim') *************** *** 501,524 **** vim9script import './Ximport/.vim' END ! CheckScriptFailure(lines, 'E1261: Cannot import .vim without using "as"') lines =<< trim END vim9script import './Ximport/.vim' as vim END ! CheckScriptSuccess(lines) writefile(['vim9script'], 'Ximport/.vimrc') lines =<< trim END vim9script import './Ximport/.vimrc' END ! CheckScriptFailure(lines, 'E1257: Imported script must use "as" or end in .vim') lines =<< trim END vim9script import './Ximport/.vimrc' as vimrc END ! CheckScriptSuccess(lines) delete('Ximport', 'rf') enddef --- 501,524 ---- vim9script import './Ximport/.vim' END ! v9.CheckScriptFailure(lines, 'E1261: Cannot import .vim without using "as"') lines =<< trim END vim9script import './Ximport/.vim' as vim END ! v9.CheckScriptSuccess(lines) writefile(['vim9script'], 'Ximport/.vimrc') lines =<< trim END vim9script import './Ximport/.vimrc' END ! v9.CheckScriptFailure(lines, 'E1257: Imported script must use "as" or end in .vim') lines =<< trim END vim9script import './Ximport/.vimrc' as vimrc END ! v9.CheckScriptSuccess(lines) delete('Ximport', 'rf') enddef *************** *** 626,632 **** feedkeys(":Cmd ab\\#\", 'xnt') assert_equal('#Cmd abcd', @:) END ! CheckScriptSuccess(lines) delcommand Cmd delete('Xscript.vim') --- 626,632 ---- feedkeys(":Cmd ab\\#\", 'xnt') assert_equal('#Cmd abcd', @:) END ! v9.CheckScriptSuccess(lines) delcommand Cmd delete('Xscript.vim') *************** *** 665,671 **** assert_equal('experiment', getline(1)) assert_equal('yes', g:completion_loaded) END ! CheckScriptSuccess(lines) set thesaurusfunc= bwipe! --- 665,671 ---- assert_equal('experiment', getline(1)) assert_equal('yes', g:completion_loaded) END ! v9.CheckScriptSuccess(lines) set thesaurusfunc= bwipe! *************** *** 698,704 **** feedkeys("\l", 'xt') assert_equal('yes', g:opfunc_called) END ! CheckScriptSuccess(lines) set opfunc= bwipe! --- 698,704 ---- feedkeys("\l", 'xt') assert_equal('yes', g:opfunc_called) END ! v9.CheckScriptSuccess(lines) set opfunc= bwipe! *************** *** 732,738 **** feedkeys("\l", 'xt') assert_equal('yes', g:opfunc_called) END ! CheckScriptSuccess(lines) set opfunc= bwipe! --- 732,738 ---- feedkeys("\l", 'xt') assert_equal('yes', g:opfunc_called) END ! v9.CheckScriptSuccess(lines) set opfunc= bwipe! *************** *** 769,775 **** new setline(1, ['# one', 'text', '# two', 'text']) g:fold_loaded = 'no' ! CheckScriptSuccess(lines) assert_equal('no', g:fold_loaded) redraw assert_equal('yes', g:fold_loaded) --- 769,775 ---- new setline(1, ['# one', 'text', '# two', 'text']) g:fold_loaded = 'no' ! v9.CheckScriptSuccess(lines) assert_equal('no', g:fold_loaded) redraw assert_equal('yes', g:fold_loaded) *************** *** 810,816 **** set diffexpr=diff.DiffExpr() set diffopt=foldcolumn:0 END ! CheckScriptSuccess(lines) enew! call setline(1, ['one', 'two', 'three']) --- 810,816 ---- set diffexpr=diff.DiffExpr() set diffopt=foldcolumn:0 END ! v9.CheckScriptSuccess(lines) enew! call setline(1, ['one', 'two', 'three']) *************** *** 842,848 **** import './Xpatchexpr' as patch set patchexpr=patch.TPatch() END ! CheckScriptSuccess(lines) call writefile(['input file'], 'Xinput') call writefile(['diff file'], 'Xdiff') --- 842,848 ---- import './Xpatchexpr' as patch set patchexpr=patch.TPatch() END ! v9.CheckScriptSuccess(lines) call writefile(['input file'], 'Xinput') call writefile(['diff file'], 'Xdiff') *************** *** 873,879 **** import './Xformatter' as format set formatexpr=format.MyFormatExpr() END ! CheckScriptSuccess(lines) new setline(1, ['a', 'b', 'c']) --- 873,879 ---- import './Xformatter' as format set formatexpr=format.MyFormatExpr() END ! v9.CheckScriptSuccess(lines) new setline(1, ['a', 'b', 'c']) *************** *** 903,909 **** import './Xinclude.vim' set includeexpr=Xinclude.DoSub() END ! CheckScriptSuccess(lines) setline(1, ['Xthatfile']) exe "normal \f" --- 903,909 ---- import './Xinclude.vim' set includeexpr=Xinclude.DoSub() END ! v9.CheckScriptSuccess(lines) setline(1, ['Xthatfile']) exe "normal \f" *************** *** 931,937 **** set indentexpr=indent.GetIndent() set debug=throw END ! CheckScriptSuccess(lines) new setline(1, 'hello') --- 931,937 ---- set indentexpr=indent.GetIndent() set debug=throw END ! v9.CheckScriptSuccess(lines) new setline(1, 'hello') *************** *** 964,970 **** import './Xprint.vim' set printexpr=Xprint.PrintFile() END ! CheckScriptSuccess(lines) help hardcopy dummy args --- 964,970 ---- import './Xprint.vim' set printexpr=Xprint.PrintFile() END ! v9.CheckScriptSuccess(lines) help hardcopy dummy args *************** *** 991,997 **** import './Xconvert.vim' as conv set charconvert=conv.MakeUpper() END ! CheckScriptSuccess(lines) writefile(['one', 'two'], 'Xfile') new Xfile --- 991,997 ---- import './Xconvert.vim' as conv set charconvert=conv.MakeUpper() END ! v9.CheckScriptSuccess(lines) writefile(['one', 'two'], 'Xfile') new Xfile *************** *** 1024,1030 **** import './Xsuggest.vim' as sugg set spell spellsuggest=expr:sugg.MySuggest() END ! CheckScriptSuccess(lines) set verbose=1 # report errors call assert_equal(['Fox', 'Fop'], spellsuggest('Fo', 2)) --- 1024,1030 ---- import './Xsuggest.vim' as sugg set spell spellsuggest=expr:sugg.MySuggest() END ! v9.CheckScriptSuccess(lines) set verbose=1 # report errors call assert_equal(['Fox', 'Fop'], spellsuggest('Fo', 2)) *************** *** 1056,1062 **** import autoload 'shadow.vim' assert_equal('Shadow()', shadow.Shadow()) END ! CheckScriptSuccess(lines) delfunc g:Shadow bwipe! --- 1056,1062 ---- import autoload 'shadow.vim' assert_equal('Shadow()', shadow.Shadow()) END ! v9.CheckScriptSuccess(lines) delfunc g:Shadow bwipe! *************** *** 1065,1073 **** enddef def Test_export_fails() ! CheckScriptFailure(['export var some = 123'], 'E1042:') ! CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') ! CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') assert_fails('export something', 'E1043:') enddef --- 1065,1073 ---- enddef def Test_export_fails() ! v9.CheckScriptFailure(['export var some = 123'], 'E1042:') ! v9.CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') ! v9.CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') assert_fails('export something', 'E1043:') enddef *************** *** 1088,1099 **** END writefile(export, 'XexportCmd.vim') ! var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', { rows: 6, wait_for_ruler: 0}) ! WaitForAssert(() => assert_match('^E1094:', term_getline(buf, 5))) delete('XexportCmd.vim') ! StopVimInTerminal(buf) enddef def Test_vim9_reload_noclear() --- 1088,1099 ---- END writefile(export, 'XexportCmd.vim') ! var buf = g:RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', { rows: 6, wait_for_ruler: 0}) ! g:WaitForAssert(() => assert_match('^E1094:', term_getline(buf, 5))) delete('XexportCmd.vim') ! g:StopVimInTerminal(buf) enddef def Test_vim9_reload_noclear() *************** *** 1348,1354 **** enddef TestDirect() END ! CheckScriptSuccess(lines) delete('Xfilter.vim') enddef --- 1348,1354 ---- enddef TestDirect() END ! v9.CheckScriptSuccess(lines) delete('Xfilter.vim') enddef *************** *** 1461,1467 **** echo 'local to function' enddef END ! CheckScriptFailure(lines, 'E1213: Redefining imported item "Func"') lines =<< trim END vim9script --- 1461,1467 ---- echo 'local to function' enddef END ! v9.CheckScriptFailure(lines, 'E1213: Redefining imported item "Func"') lines =<< trim END vim9script *************** *** 1473,1479 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1236:') delete('XexportedFunc.vim') enddef --- 1473,1479 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1236:') delete('XexportedFunc.vim') enddef *************** *** 1696,1705 **** assert_equal('final', prefixed.fname) assert_equal('const', prefixed.cname) END ! CheckScriptSuccess(lines) # can source it again, autoload script not loaded again g:expected_loaded = 1 ! CheckScriptSuccess(lines) # can also get the items by autoload name lines =<< trim END --- 1696,1705 ---- assert_equal('final', prefixed.fname) assert_equal('const', prefixed.cname) END ! v9.CheckScriptSuccess(lines) # can source it again, autoload script not loaded again g:expected_loaded = 1 ! v9.CheckScriptSuccess(lines) # can also get the items by autoload name lines =<< trim END *************** *** 1709,1715 **** call assert_equal('final', prefixed#fname) call assert_equal('const', prefixed#cname) END ! CheckScriptSuccess(lines) unlet g:prefixed_loaded unlet g:expected_loaded --- 1709,1715 ---- call assert_equal('final', prefixed#fname) call assert_equal('const', prefixed#cname) END ! v9.CheckScriptSuccess(lines) unlet g:prefixed_loaded unlet g:expected_loaded *************** *** 1737,1778 **** import autoload 'notExport1.vim' echo notExport1.notFound END ! CheckScriptFailure(lines, 'E1048: Item not found in script: notFound') lines =<< trim END vim9script import autoload 'notExport1.vim' echo notExport1.notExported END ! CheckScriptFailure(lines, 'E1049: Item not exported in script: notExported') lines =<< trim END vim9script import autoload 'notExport1.vim' echo notExport1.NotFunc() END ! CheckScriptFailure(lines, 'E1048: Item not found in script: NotFunc') lines =<< trim END vim9script import autoload 'notExport1.vim' echo notExport1.NotExport() END ! CheckScriptFailure(lines, 'E1049: Item not exported in script: NotExport') lines =<< trim END vim9script import autoload 'notExport1.vim' echo 'text'->notExport1.NotFunc() END ! CheckScriptFailure(lines, 'E1048: Item not found in script: NotFunc') lines =<< trim END vim9script import autoload 'notExport1.vim' echo 'text'->notExport1.NotExport() END ! CheckScriptFailure(lines, 'E1049: Item not exported in script: NotExport') # using a :def function we use a different autoload script every time so that # the function is compiled without the script loaded --- 1737,1778 ---- import autoload 'notExport1.vim' echo notExport1.notFound END ! v9.CheckScriptFailure(lines, 'E1048: Item not found in script: notFound') lines =<< trim END vim9script import autoload 'notExport1.vim' echo notExport1.notExported END ! v9.CheckScriptFailure(lines, 'E1049: Item not exported in script: notExported') lines =<< trim END vim9script import autoload 'notExport1.vim' echo notExport1.NotFunc() END ! v9.CheckScriptFailure(lines, 'E1048: Item not found in script: NotFunc') lines =<< trim END vim9script import autoload 'notExport1.vim' echo notExport1.NotExport() END ! v9.CheckScriptFailure(lines, 'E1049: Item not exported in script: NotExport') lines =<< trim END vim9script import autoload 'notExport1.vim' echo 'text'->notExport1.NotFunc() END ! v9.CheckScriptFailure(lines, 'E1048: Item not found in script: NotFunc') lines =<< trim END vim9script import autoload 'notExport1.vim' echo 'text'->notExport1.NotExport() END ! v9.CheckScriptFailure(lines, 'E1049: Item not exported in script: NotExport') # using a :def function we use a different autoload script every time so that # the function is compiled without the script loaded *************** *** 1785,1791 **** enddef Testit() END ! CheckScriptFailure(lines, 'E1048: Item not found in script: notExport2#notFound') writefile(exportLines, 'Xdir/autoload/notExport3.vim') lines =<< trim END --- 1785,1791 ---- enddef Testit() END ! v9.CheckScriptFailure(lines, 'E1048: Item not found in script: notExport2#notFound') writefile(exportLines, 'Xdir/autoload/notExport3.vim') lines =<< trim END *************** *** 1797,1803 **** Testit() END # don't get E1049 because it is too complicated to figure out ! CheckScriptFailure(lines, 'E1048: Item not found in script: notExport3#notExported') writefile(exportLines, 'Xdir/autoload/notExport4.vim') lines =<< trim END --- 1797,1803 ---- Testit() END # don't get E1049 because it is too complicated to figure out ! v9.CheckScriptFailure(lines, 'E1048: Item not found in script: notExport3#notExported') writefile(exportLines, 'Xdir/autoload/notExport4.vim') lines =<< trim END *************** *** 1808,1814 **** enddef Testit() END ! CheckScriptFailure(lines, 'E117: Unknown function: notExport4#NotFunc') writefile(exportLines, 'Xdir/autoload/notExport5.vim') lines =<< trim END --- 1808,1814 ---- enddef Testit() END ! v9.CheckScriptFailure(lines, 'E117: Unknown function: notExport4#NotFunc') writefile(exportLines, 'Xdir/autoload/notExport5.vim') lines =<< trim END *************** *** 1819,1825 **** enddef Testit() END ! CheckScriptFailure(lines, 'E117: Unknown function: notExport5#NotExport') writefile(exportLines, 'Xdir/autoload/notExport6.vim') lines =<< trim END --- 1819,1825 ---- enddef Testit() END ! v9.CheckScriptFailure(lines, 'E117: Unknown function: notExport5#NotExport') writefile(exportLines, 'Xdir/autoload/notExport6.vim') lines =<< trim END *************** *** 1830,1836 **** enddef Testit() END ! CheckScriptFailure(lines, 'E117: Unknown function: notExport6#NotFunc') writefile(exportLines, 'Xdir/autoload/notExport7.vim') lines =<< trim END --- 1830,1836 ---- enddef Testit() END ! v9.CheckScriptFailure(lines, 'E117: Unknown function: notExport6#NotFunc') writefile(exportLines, 'Xdir/autoload/notExport7.vim') lines =<< trim END *************** *** 1841,1847 **** enddef Testit() END ! CheckScriptFailure(lines, 'E117: Unknown function: notExport7#NotExport') delete('Xdir', 'rf') &rtp = save_rtp --- 1841,1847 ---- enddef Testit() END ! v9.CheckScriptFailure(lines, 'E117: Unknown function: notExport7#NotExport') delete('Xdir', 'rf') &rtp = save_rtp *************** *** 1880,1886 **** assert_equal('arg', call('another.RetArg', ['arg'])) END ! CheckScriptSuccess(lines) unlet g:result delete('Xdir', 'rf') --- 1880,1886 ---- assert_equal('arg', call('another.RetArg', ['arg'])) END ! v9.CheckScriptSuccess(lines) unlet g:result delete('Xdir', 'rf') *************** *** 2025,2031 **** enddef END writefile(lines, 'Xscriptname.vim') ! CheckScriptFailure(lines, 'E1263:') delete('Xscriptname.vim') enddef --- 2025,2031 ---- enddef END writefile(lines, 'Xscriptname.vim') ! v9.CheckScriptFailure(lines, 'E1263:') delete('Xscriptname.vim') enddef *************** *** 2056,2064 **** enddef defcompile END ! CheckScriptSuccess(lines) assert_false(exists('g:loaded_postponed')) ! CheckScriptSuccess(lines + ['Tryit()']) assert_equal('true', g:loaded_postponed) unlet g:loaded_postponed --- 2056,2064 ---- enddef defcompile END ! v9.CheckScriptSuccess(lines) assert_false(exists('g:loaded_postponed')) ! v9.CheckScriptSuccess(lines + ['Tryit()']) assert_equal('true', g:loaded_postponed) unlet g:loaded_postponed *************** *** 2094,2100 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1048: Item not found in script: doesNotExist', 1) test_override('autoload', 0) unlet g:loaded_override --- 2094,2100 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1048: Item not found in script: doesNotExist', 1) test_override('autoload', 0) unlet g:loaded_override *************** *** 2130,2136 **** nnoremap xx toggle.Doit() nnoremap yy toggle.Doit() END ! CheckScriptSuccess(lines) assert_false(exists("g:toggle_loaded")) assert_false(exists("g:toggle_called")) assert_match('\d A: \f*[/\\]toggle.vim', execute('scriptnames')) --- 2130,2136 ---- nnoremap xx toggle.Doit() nnoremap yy toggle.Doit() END ! v9.CheckScriptSuccess(lines) assert_false(exists("g:toggle_loaded")) assert_false(exists("g:toggle_called")) assert_match('\d A: \f*[/\\]toggle.vim', execute('scriptnames')) *************** *** 2159,2171 **** vim9script autoload var n = 0 END ! CheckScriptFailure(lines, 'E475: Invalid argument: autoload') lines =<< trim END vim9script noclear noclear var n = 0 END ! CheckScriptFailure(lines, 'E983: Duplicate argument: noclear') enddef def Test_import_autoload_fails() --- 2159,2171 ---- vim9script autoload var n = 0 END ! v9.CheckScriptFailure(lines, 'E475: Invalid argument: autoload') lines =<< trim END vim9script noclear noclear var n = 0 END ! v9.CheckScriptFailure(lines, 'E983: Duplicate argument: noclear') enddef def Test_import_autoload_fails() *************** *** 2173,2197 **** vim9script import autoload autoload 'prefixed.vim' END ! CheckScriptFailure(lines, 'E121: Undefined variable: autoload') lines =<< trim END vim9script import autoload './doesNotExist.vim' END ! CheckScriptFailure(lines, 'E1264:') lines =<< trim END vim9script import autoload '/dir/doesNotExist.vim' END ! CheckScriptFailure(lines, 'E1264:') lines =<< trim END vim9script import autoload 'doesNotExist.vim' END ! CheckScriptFailure(lines, 'E1053: Could not import "doesNotExist.vim"') enddef " test disassembling an auto-loaded function starting with "debug" --- 2173,2197 ---- vim9script import autoload autoload 'prefixed.vim' END ! v9.CheckScriptFailure(lines, 'E121: Undefined variable: autoload') lines =<< trim END vim9script import autoload './doesNotExist.vim' END ! v9.CheckScriptFailure(lines, 'E1264:') lines =<< trim END vim9script import autoload '/dir/doesNotExist.vim' END ! v9.CheckScriptFailure(lines, 'E1264:') lines =<< trim END vim9script import autoload 'doesNotExist.vim' END ! v9.CheckScriptFailure(lines, 'E1053: Could not import "doesNotExist.vim"') enddef " test disassembling an auto-loaded function starting with "debug" *************** *** 2223,2229 **** assert_equal('profile', profileit#test()) disass profileit#test END ! CheckScriptSuccess(lines) delete('Xdir', 'rf') &rtp = save_rtp --- 2223,2229 ---- assert_equal('profile', profileit#test()) disass profileit#test END ! v9.CheckScriptSuccess(lines) delete('Xdir', 'rf') &rtp = save_rtp *************** *** 2274,2280 **** import autoload 'CaseSensitive.vim' assert_equal('done', CaseSensitive.CaseSensitive()) END ! CheckScriptSuccess(lines) if !has('fname_case') lines =<< trim END --- 2274,2280 ---- import autoload 'CaseSensitive.vim' assert_equal('done', CaseSensitive.CaseSensitive()) END ! v9.CheckScriptSuccess(lines) if !has('fname_case') lines =<< trim END *************** *** 2282,2288 **** import autoload 'CaseSensitive.vim' import autoload 'casesensitive.vim' END ! CheckScriptFailure(lines, 'E1262:') endif delete('Xdir', 'rf') --- 2282,2288 ---- import autoload 'CaseSensitive.vim' import autoload 'casesensitive.vim' END ! v9.CheckScriptFailure(lines, 'E1262:') endif delete('Xdir', 'rf') *************** *** 2320,2326 **** qall! END writefile(lines, 'Xscript') ! RunVim([], [], '-S Xscript') assert_equal(['ok'], readfile('Xdidit')) delete('Xdidit') --- 2320,2326 ---- qall! END writefile(lines, 'Xscript') ! g:RunVim([], [], '-S Xscript') assert_equal(['ok'], readfile('Xdidit')) delete('Xdidit') *************** *** 2331,2337 **** vim9script var foo#bar = 'asdf' END ! CheckScriptFailure(lines, 'E461: Illegal variable name: foo#bar', 2) enddef --- 2331,2337 ---- vim9script var foo#bar = 'asdf' END ! v9.CheckScriptFailure(lines, 'E461: Illegal variable name: foo#bar', 2) enddef *** ../vim-8.2.4256/src/testdir/test_vim9_script.vim 2022-01-19 20:48:33.496661246 +0000 --- src/testdir/test_vim9_script.vim 2022-01-29 20:24:59.252744098 +0000 *************** *** 2,8 **** source check.vim source term_util.vim ! source vim9.vim source screendump.vim source shared.vim --- 2,8 ---- source check.vim source term_util.vim ! import './vim9.vim' as v9 source screendump.vim source shared.vim *************** *** 18,24 **** # Vim9 script commands go here g:didit = true END ! CheckScriptSuccess(lines) assert_equal(true, g:didit) unlet g:didit enddef --- 18,24 ---- # Vim9 script commands go here g:didit = true END ! v9.CheckScriptSuccess(lines) assert_equal(true, g:didit) unlet g:didit enddef *************** *** 35,54 **** setline(1, ['one', 'two', 'three']) :2 print ! assert_equal('two', Screenline(&lines)) :3 list ! assert_equal('three$', Screenline(&lines)) # missing command does not print the line var lines =<< trim END vim9script :1| ! assert_equal('three$', Screenline(&lines)) :| ! assert_equal('three$', Screenline(&lines)) END ! CheckScriptSuccess(lines) bwipe! --- 35,54 ---- setline(1, ['one', 'two', 'three']) :2 print ! assert_equal('two', g:Screenline(&lines)) :3 list ! assert_equal('three$', g:Screenline(&lines)) # missing command does not print the line var lines =<< trim END vim9script :1| ! assert_equal('three$', g:Screenline(&lines)) :| ! assert_equal('three$', g:Screenline(&lines)) END ! v9.CheckScriptSuccess(lines) bwipe! *************** *** 64,70 **** def Test_delfunction() # Check function is defined in script namespace ! CheckScriptSuccess([ 'vim9script', 'func CheckMe()', ' return 123', --- 64,70 ---- def Test_delfunction() # Check function is defined in script namespace ! v9.CheckScriptSuccess([ 'vim9script', 'func CheckMe()', ' return 123', *************** *** 73,85 **** ]) # Check function in script namespace cannot be deleted ! CheckScriptFailure([ 'vim9script', 'func DeleteMe1()', 'endfunc', 'delfunction DeleteMe1', ], 'E1084:') ! CheckScriptFailure([ 'vim9script', 'func DeleteMe2()', 'endfunc', --- 73,85 ---- ]) # Check function in script namespace cannot be deleted ! v9.CheckScriptFailure([ 'vim9script', 'func DeleteMe1()', 'endfunc', 'delfunction DeleteMe1', ], 'E1084:') ! v9.CheckScriptFailure([ 'vim9script', 'func DeleteMe2()', 'endfunc', *************** *** 88,100 **** 'enddef', 'DoThat()', ], 'E1084:') ! CheckScriptFailure([ 'vim9script', 'def DeleteMe3()', 'enddef', 'delfunction DeleteMe3', ], 'E1084:') ! CheckScriptFailure([ 'vim9script', 'def DeleteMe4()', 'enddef', --- 88,100 ---- 'enddef', 'DoThat()', ], 'E1084:') ! v9.CheckScriptFailure([ 'vim9script', 'def DeleteMe3()', 'enddef', 'delfunction DeleteMe3', ], 'E1084:') ! v9.CheckScriptFailure([ 'vim9script', 'def DeleteMe4()', 'enddef', *************** *** 118,124 **** delfunc g:Global assert_false(exists('*g:Global')) END ! CheckScriptSuccess(lines) # Check that global function can be replaced by a :def function and deleted lines =<< trim END --- 118,124 ---- delfunc g:Global assert_false(exists('*g:Global')) END ! v9.CheckScriptSuccess(lines) # Check that global function can be replaced by a :def function and deleted lines =<< trim END *************** *** 134,140 **** delfunc g:Global assert_false(exists('*g:Global')) END ! CheckScriptSuccess(lines) # Check that global :def function can be replaced by a function and deleted lines =<< trim END --- 134,140 ---- delfunc g:Global assert_false(exists('*g:Global')) END ! v9.CheckScriptSuccess(lines) # Check that global :def function can be replaced by a function and deleted lines =<< trim END *************** *** 150,181 **** delfunc g:Global assert_false(exists('*g:Global')) END ! CheckScriptSuccess(lines) enddef def Test_wrong_type() ! CheckDefFailure(['var name: list'], 'E1010:') ! CheckDefFailure(['var name: list>'], 'E1010:') ! CheckDefFailure(['var name: dict'], 'E1010:') ! CheckDefFailure(['var name: dict>'], 'E1010:') ! ! CheckDefFailure(['var name: dict'], 'E1009:') ! ! CheckDefFailure(['var name: ally'], 'E1010:') ! CheckDefFailure(['var name: bram'], 'E1010:') ! CheckDefFailure(['var name: cathy'], 'E1010:') ! CheckDefFailure(['var name: dom'], 'E1010:') ! CheckDefFailure(['var name: freddy'], 'E1010:') ! CheckDefFailure(['var name: john'], 'E1010:') ! CheckDefFailure(['var name: larry'], 'E1010:') ! CheckDefFailure(['var name: ned'], 'E1010:') ! CheckDefFailure(['var name: pam'], 'E1010:') ! CheckDefFailure(['var name: sam'], 'E1010:') ! CheckDefFailure(['var name: vim'], 'E1010:') ! CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:') ! CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:') enddef def Test_script_wrong_type() --- 150,181 ---- delfunc g:Global assert_false(exists('*g:Global')) END ! v9.CheckScriptSuccess(lines) enddef def Test_wrong_type() ! v9.CheckDefFailure(['var name: list'], 'E1010:') ! v9.CheckDefFailure(['var name: list>'], 'E1010:') ! v9.CheckDefFailure(['var name: dict'], 'E1010:') ! v9.CheckDefFailure(['var name: dict>'], 'E1010:') ! ! v9.CheckDefFailure(['var name: dict'], 'E1009:') ! ! v9.CheckDefFailure(['var name: ally'], 'E1010:') ! v9.CheckDefFailure(['var name: bram'], 'E1010:') ! v9.CheckDefFailure(['var name: cathy'], 'E1010:') ! v9.CheckDefFailure(['var name: dom'], 'E1010:') ! v9.CheckDefFailure(['var name: freddy'], 'E1010:') ! v9.CheckDefFailure(['var name: john'], 'E1010:') ! v9.CheckDefFailure(['var name: larry'], 'E1010:') ! v9.CheckDefFailure(['var name: ned'], 'E1010:') ! v9.CheckDefFailure(['var name: pam'], 'E1010:') ! v9.CheckDefFailure(['var name: sam'], 'E1010:') ! v9.CheckDefFailure(['var name: vim'], 'E1010:') ! v9.CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:') ! v9.CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:') enddef def Test_script_wrong_type() *************** *** 184,198 **** var s:dict: dict s:dict['a'] = ['x'] END ! CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list', 3) enddef def Test_const() ! CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:') ! CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:') ! CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:') ! CheckDefFailure(['final two'], 'E1125:') ! CheckDefFailure(['final &option'], 'E996:') var lines =<< trim END final list = [1, 2, 3] --- 184,198 ---- var s:dict: dict s:dict['a'] = ['x'] END ! v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list', 3) enddef def Test_const() ! v9.CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:') ! v9.CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:') ! v9.CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:') ! v9.CheckDefFailure(['final two'], 'E1125:') ! v9.CheckDefFailure(['final &option'], 'E996:') var lines =<< trim END final list = [1, 2, 3] *************** *** 217,223 **** cd['six'] = 66 constdict->assert_equal({one: 1, two: {five: 55, six: 66}, three: 3}) END ! CheckDefAndScriptSuccess(lines) enddef def Test_const_bang() --- 217,223 ---- cd['six'] = 66 constdict->assert_equal({one: 1, two: {five: 55, six: 66}, three: 3}) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_const_bang() *************** *** 225,267 **** const var = 234 var = 99 END ! CheckDefExecFailure(lines, 'E1018:', 2) ! CheckScriptFailure(['vim9script'] + lines, 'E46:', 3) lines =<< trim END const ll = [2, 3, 4] ll[0] = 99 END ! CheckDefExecFailure(lines, 'E1119:', 2) ! CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) lines =<< trim END const ll = [2, 3, 4] ll[3] = 99 END ! CheckDefExecFailure(lines, 'E1118:', 2) ! CheckScriptFailure(['vim9script'] + lines, 'E684:', 3) lines =<< trim END const dd = {one: 1, two: 2} dd["one"] = 99 END ! CheckDefExecFailure(lines, 'E1121:', 2) ! CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) lines =<< trim END const dd = {one: 1, two: 2} dd["three"] = 99 END ! CheckDefExecFailure(lines, 'E1120:') ! CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) enddef def Test_range_no_colon() ! CheckDefFailure(['%s/a/b/'], 'E1050:') ! CheckDefFailure(['+ s/a/b/'], 'E1050:') ! CheckDefFailure(['- s/a/b/'], 'E1050:') ! CheckDefFailure(['. s/a/b/'], 'E1050:') enddef --- 225,267 ---- const var = 234 var = 99 END ! v9.CheckDefExecFailure(lines, 'E1018:', 2) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E46:', 3) lines =<< trim END const ll = [2, 3, 4] ll[0] = 99 END ! v9.CheckDefExecFailure(lines, 'E1119:', 2) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) lines =<< trim END const ll = [2, 3, 4] ll[3] = 99 END ! v9.CheckDefExecFailure(lines, 'E1118:', 2) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E684:', 3) lines =<< trim END const dd = {one: 1, two: 2} dd["one"] = 99 END ! v9.CheckDefExecFailure(lines, 'E1121:', 2) ! v9.CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) lines =<< trim END const dd = {one: 1, two: 2} dd["three"] = 99 END ! v9.CheckDefExecFailure(lines, 'E1120:') ! v9.CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) enddef def Test_range_no_colon() ! v9.CheckDefFailure(['%s/a/b/'], 'E1050:') ! v9.CheckDefFailure(['+ s/a/b/'], 'E1050:') ! v9.CheckDefFailure(['- s/a/b/'], 'E1050:') ! v9.CheckDefFailure(['. s/a/b/'], 'E1050:') enddef *************** *** 278,286 **** enddef def Test_block_failure() ! CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:') ! CheckDefFailure(['}'], 'E1025:') ! CheckDefFailure(['{', 'echo 1'], 'E1026:') enddef def Test_block_local_vars() --- 278,286 ---- enddef def Test_block_failure() ! v9.CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:') ! v9.CheckDefFailure(['}'], 'E1025:') ! v9.CheckDefFailure(['{', 'echo 1'], 'E1026:') enddef def Test_block_local_vars() *************** *** 322,328 **** # need to execute this with a separate Vim instance to avoid the current # context gets garbage collected. writefile(lines, 'Xscript') ! RunVim([], [], '-S Xscript') assert_equal(['ok'], readfile('Xdidit')) delete('Xscript') --- 322,328 ---- # need to execute this with a separate Vim instance to avoid the current # context gets garbage collected. writefile(lines, 'Xscript') ! g:RunVim([], [], '-S Xscript') assert_equal(['ok'], readfile('Xdidit')) delete('Xscript') *************** *** 345,355 **** # "foo" and "bar" assert_equal(['foo', 'bar'], Func()) END ! CheckScriptSuccess(lines) enddef " legacy func for command that's defined later ! func InvokeSomeCommand() SomeCommand endfunc --- 345,355 ---- # "foo" and "bar" assert_equal(['foo', 'bar'], Func()) END ! v9.CheckScriptSuccess(lines) enddef " legacy func for command that's defined later ! func s:InvokeSomeCommand() SomeCommand endfunc *************** *** 557,563 **** assert_equal(333, n) try ! l = DeletedFunc() catch /E933:/ n = 344 endtry --- 557,563 ---- assert_equal(333, n) try ! l = g:DeletedFunc() catch /E933:/ n = 344 endtry *************** *** 679,685 **** g:caught = v:exception endtry END ! CheckScriptSuccess(lines) assert_match('E1219: Float or Number required for argument 1', g:caught) unlet g:caught --- 679,685 ---- g:caught = v:exception endtry END ! v9.CheckScriptSuccess(lines) assert_match('E1219: Float or Number required for argument 1', g:caught) unlet g:caught *************** *** 690,696 **** echo 'something' endtry END ! CheckScriptFailure(lines, 'E1032:') # skipping try-finally-endtry when try-finally-endtry is used in another block lines =<< trim END --- 690,696 ---- echo 'something' endtry END ! v9.CheckScriptFailure(lines, 'E1032:') # skipping try-finally-endtry when try-finally-endtry is used in another block lines =<< trim END *************** *** 704,710 **** endtry endif END ! CheckDefAndScriptSuccess(lines) enddef def Test_try_ends_in_return() --- 704,710 ---- endtry endif END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_try_ends_in_return() *************** *** 719,725 **** enddef assert_equal('foo', Foo()) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 719,725 ---- enddef assert_equal('foo', Foo()) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 733,739 **** enddef assert_equal('foo', Foo()) END ! CheckScriptFailure(lines, 'E1095:') lines =<< trim END vim9script --- 733,739 ---- enddef assert_equal('foo', Foo()) END ! v9.CheckScriptFailure(lines, 'E1095:') lines =<< trim END vim9script *************** *** 746,752 **** enddef assert_equal('foo', Foo()) END ! CheckScriptFailure(lines, 'E1027:') lines =<< trim END vim9script --- 746,752 ---- enddef assert_equal('foo', Foo()) END ! v9.CheckScriptFailure(lines, 'E1027:') lines =<< trim END vim9script *************** *** 761,767 **** enddef assert_equal('done', Foo()) END ! CheckScriptSuccess(lines) enddef --- 761,767 ---- enddef assert_equal('done', Foo()) END ! v9.CheckScriptSuccess(lines) enddef *************** *** 799,809 **** eval [][0] endtry END ! CheckDefExecFailure(lines, 'E684:', 4) enddef " :while at the very start of a function that :continue jumps to ! def TryContinueFunc() while g:Count < 2 g:sequence ..= 't' try --- 799,809 ---- eval [][0] endtry END ! v9.CheckDefExecFailure(lines, 'E684:', 4) enddef " :while at the very start of a function that :continue jumps to ! def s:TryContinueFunc() while g:Count < 2 g:sequence ..= 't' try *************** *** 867,873 **** qall END writefile(lines, 'XCatchCnext') ! RunVim([], [], '--clean -S XCatchCnext') assert_equal(['1'], readfile('Xresult')) delete('Xfile1') --- 867,873 ---- qall END writefile(lines, 'XCatchCnext') ! g:RunVim([], [], '--clean -S XCatchCnext') assert_equal(['1'], readfile('Xresult')) delete('Xfile1') *************** *** 901,919 **** defcompile delfunc DeletedFunc ! def ThrowFromDef() throw "getout" # comment enddef ! func CatchInFunc() try ! call ThrowFromDef() catch let g:thrown_func = v:exception endtry endfunc ! def CatchInDef() try ThrowFromDef() catch --- 901,919 ---- defcompile delfunc DeletedFunc ! def s:ThrowFromDef() throw "getout" # comment enddef ! func s:CatchInFunc() try ! call s:ThrowFromDef() catch let g:thrown_func = v:exception endtry endfunc ! def s:CatchInDef() try ThrowFromDef() catch *************** *** 921,927 **** endtry enddef ! def ReturnFinally(): string try return 'intry' finall --- 921,927 ---- endtry enddef ! def s:ReturnFinally(): string try return 'intry' finall *************** *** 984,990 **** assert_equal(['1', '2', '3', '4'], l) enddef ! def TryOne(): number try return 0 catch --- 984,990 ---- assert_equal(['1', '2', '3', '4'], l) enddef ! def s:TryOne(): number try return 0 catch *************** *** 992,998 **** return 0 enddef ! def TryTwo(n: number): string try var x = {} catch --- 992,998 ---- return 0 enddef ! def s:TryTwo(n: number): string try var x = {} catch *************** *** 1023,1041 **** enddef def Test_try_catch_fails() ! CheckDefFailure(['catch'], 'E603:') ! CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') ! CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') ! CheckDefFailure(['finally'], 'E606:') ! CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') ! CheckDefFailure(['endtry'], 'E602:') ! CheckDefFailure(['while 1', 'endtry'], 'E170:') ! CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') ! CheckDefFailure(['if 1', 'endtry'], 'E171:') ! CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') ! CheckDefFailure(['throw'], 'E1143:') ! CheckDefFailure(['throw xxx'], 'E1001:') enddef def Try_catch_skipped() --- 1023,1041 ---- enddef def Test_try_catch_fails() ! v9.CheckDefFailure(['catch'], 'E603:') ! v9.CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') ! v9.CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') ! v9.CheckDefFailure(['finally'], 'E606:') ! v9.CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') ! v9.CheckDefFailure(['endtry'], 'E602:') ! v9.CheckDefFailure(['while 1', 'endtry'], 'E170:') ! v9.CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') ! v9.CheckDefFailure(['if 1', 'endtry'], 'E171:') ! v9.CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') ! v9.CheckDefFailure(['throw'], 'E1143:') ! v9.CheckDefFailure(['throw xxx'], 'E1001:') enddef def Try_catch_skipped() *************** *** 1070,1076 **** assert_equal('onetwo', v:exception) endtry END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 1070,1076 ---- assert_equal('onetwo', v:exception) endtry END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 1086,1092 **** endtry assert_equal('caught', result) END ! CheckScriptSuccess(lines) enddef def Test_error_in_nested_function() --- 1086,1092 ---- endtry assert_equal('caught', result) END ! v9.CheckScriptSuccess(lines) enddef def Test_error_in_nested_function() *************** *** 1103,1109 **** Func() END g:test_var = 0 ! CheckScriptFailure(lines, 'E684:') assert_equal(0, g:test_var) enddef --- 1103,1109 ---- Func() END g:test_var = 0 ! v9.CheckScriptFailure(lines, 'E684:') assert_equal(0, g:test_var) enddef *************** *** 1116,1122 **** g:gotthere = true END g:gotthere = false ! CheckScriptFailure(lines, 'E121:') assert_false(g:gotthere) unlet g:gotthere enddef --- 1116,1122 ---- g:gotthere = true END g:gotthere = false ! v9.CheckScriptFailure(lines, 'E121:') assert_false(g:gotthere) unlet g:gotthere enddef *************** *** 1131,1137 **** ' line 19' assert_equal(19, getqflist()[0].lnum) END ! CheckScriptSuccess(lines) set errorformat& enddef --- 1131,1137 ---- ' line 19' assert_equal(19, getqflist()[0].lnum) END ! v9.CheckScriptSuccess(lines) set errorformat& enddef *************** *** 1146,1152 **** redrawstatus set laststatus statusline= END ! CheckScriptSuccess(lines) enddef def Test_list_vimscript() --- 1146,1152 ---- redrawstatus set laststatus statusline= END ! v9.CheckScriptSuccess(lines) enddef def Test_list_vimscript() *************** *** 1162,1168 **** ] assert_equal(['one', 'two', 'three'], mylist) END ! CheckScriptSuccess(lines) # check all lines from heredoc are kept lines =<< trim END --- 1162,1168 ---- ] assert_equal(['one', 'two', 'three'], mylist) END ! v9.CheckScriptSuccess(lines) # check all lines from heredoc are kept lines =<< trim END *************** *** 1179,1185 **** [{ a: 0}]->string()->assert_equal("[{'a': 0}]") END ! CheckDefAndScriptSuccess(lines) enddef if has('channel') --- 1179,1185 ---- [{ a: 0}]->string()->assert_equal("[{'a': 0}]") END ! v9.CheckDefAndScriptSuccess(lines) enddef if has('channel') *************** *** 1210,1230 **** END g:feature = 'eval' g:legacy = -1 ! CheckScriptSuccess(lines) assert_equal(1, g:legacy) g:feature = 'noteval' g:legacy = -1 ! CheckScriptSuccess(lines) assert_equal(0, g:legacy) enddef def Test_vim9script_fails() ! CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') ! CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') ! CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:') ! CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') assert_fails('vim9script', 'E1038:') enddef --- 1210,1230 ---- END g:feature = 'eval' g:legacy = -1 ! v9.CheckScriptSuccess(lines) assert_equal(1, g:legacy) g:feature = 'noteval' g:legacy = -1 ! v9.CheckScriptSuccess(lines) assert_equal(0, g:legacy) enddef def Test_vim9script_fails() ! v9.CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') ! v9.CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') ! v9.CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:') ! v9.CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') assert_fails('vim9script', 'E1038:') enddef *************** *** 1237,1243 **** enddef var Func = 1 END ! CheckScriptFailure(lines, 'E1041:', 5) enddef def Test_function_shadows_script_var() --- 1237,1243 ---- enddef var Func = 1 END ! v9.CheckScriptFailure(lines, 'E1041:', 5) enddef def Test_function_shadows_script_var() *************** *** 1248,1254 **** return 123 enddef END ! CheckScriptFailure(lines, 'E1041:', 3) enddef def Test_script_var_shadows_command() --- 1248,1254 ---- return 123 enddef END ! v9.CheckScriptFailure(lines, 'E1041:', 3) enddef def Test_script_var_shadows_command() *************** *** 1257,1269 **** undo = 2 assert_equal(2, undo) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var undo = 1 undo END ! CheckDefAndScriptFailure(lines, 'E1207:', 2) enddef def Test_vim9script_call_wrong_type() --- 1257,1269 ---- undo = 2 assert_equal(2, undo) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var undo = 1 undo END ! v9.CheckDefAndScriptFailure(lines, 'E1207:', 2) enddef def Test_vim9script_call_wrong_type() *************** *** 1272,1278 **** var Time = 'localtime' Time() END ! CheckScriptFailure(lines, 'E1085:') enddef def Test_vim9script_reload_delfunc() --- 1272,1278 ---- var Time = 'localtime' Time() END ! v9.CheckScriptFailure(lines, 'E1085:') enddef def Test_vim9script_reload_delfunc() *************** *** 1371,1377 **** echo 'two' enddef END ! CheckScriptFailure(lines, 'E1073:') lines =<< trim END vim9script --- 1371,1377 ---- echo 'two' enddef END ! v9.CheckScriptFailure(lines, 'E1073:') lines =<< trim END vim9script *************** *** 1383,1389 **** enddef defcompile END ! CheckScriptFailure(lines, 'E1073:') enddef def Test_fixed_size_list() --- 1383,1389 ---- enddef defcompile END ! v9.CheckScriptFailure(lines, 'E1073:') enddef def Test_fixed_size_list() *************** *** 1396,1421 **** enddef def Test_no_insert_xit() ! CheckDefExecFailure(['a = 1'], 'E1100:') ! CheckDefExecFailure(['c = 1'], 'E1100:') ! CheckDefExecFailure(['i = 1'], 'E1100:') ! CheckDefExecFailure(['t = 1'], 'E1100:') ! CheckDefExecFailure(['x = 1'], 'E1100:') ! ! CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') ! CheckScriptFailure(['vim9script', 'a'], 'E1100:') ! CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') ! CheckScriptFailure(['vim9script', 'c'], 'E1100:') ! CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') ! CheckScriptFailure(['vim9script', 'i'], 'E1100:') ! CheckScriptFailure(['vim9script', 'o = 1'], 'E1100:') ! CheckScriptFailure(['vim9script', 'o'], 'E1100:') ! CheckScriptFailure(['vim9script', 't'], 'E1100:') ! CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') ! CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') enddef ! def IfElse(what: number): string var res = '' if what == 1 res = "one" --- 1396,1421 ---- enddef def Test_no_insert_xit() ! v9.CheckDefExecFailure(['a = 1'], 'E1100:') ! v9.CheckDefExecFailure(['c = 1'], 'E1100:') ! v9.CheckDefExecFailure(['i = 1'], 'E1100:') ! v9.CheckDefExecFailure(['t = 1'], 'E1100:') ! v9.CheckDefExecFailure(['x = 1'], 'E1100:') ! ! v9.CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') ! v9.CheckScriptFailure(['vim9script', 'a'], 'E1100:') ! v9.CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') ! v9.CheckScriptFailure(['vim9script', 'c'], 'E1100:') ! v9.CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') ! v9.CheckScriptFailure(['vim9script', 'i'], 'E1100:') ! v9.CheckScriptFailure(['vim9script', 'o = 1'], 'E1100:') ! v9.CheckScriptFailure(['vim9script', 'o'], 'E1100:') ! v9.CheckScriptFailure(['vim9script', 't'], 'E1100:') ! v9.CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') ! v9.CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') enddef ! def s:IfElse(what: number): string var res = '' if what == 1 res = "one" *************** *** 1434,1451 **** enddef def Test_if_elseif_else_fails() ! CheckDefFailure(['elseif true'], 'E582:') ! CheckDefFailure(['else'], 'E581:') ! CheckDefFailure(['endif'], 'E580:') ! CheckDefFailure(['if g:abool', 'elseif xxx'], 'E1001:') ! CheckDefFailure(['if true', 'echo 1'], 'E171:') var lines =<< trim END var s = '' if s = '' endif END ! CheckDefFailure(lines, 'E488:') lines =<< trim END var s = '' --- 1434,1451 ---- enddef def Test_if_elseif_else_fails() ! v9.CheckDefFailure(['elseif true'], 'E582:') ! v9.CheckDefFailure(['else'], 'E581:') ! v9.CheckDefFailure(['endif'], 'E580:') ! v9.CheckDefFailure(['if g:abool', 'elseif xxx'], 'E1001:') ! v9.CheckDefFailure(['if true', 'echo 1'], 'E171:') var lines =<< trim END var s = '' if s = '' endif END ! v9.CheckDefFailure(lines, 'E488:') lines =<< trim END var s = '' *************** *** 1453,1459 **** elseif s = '' endif END ! CheckDefFailure(lines, 'E488:') enddef let g:bool_true = v:true --- 1453,1459 ---- elseif s = '' endif END ! v9.CheckDefFailure(lines, 'E488:') enddef let g:bool_true = v:true *************** *** 1590,1602 **** enddef def Test_if_const_expr_fails() ! CheckDefFailure(['if "aaa" == "bbb'], 'E114:') ! CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') ! CheckDefFailure(["if has('aaa'"], 'E110:') ! CheckDefFailure(["if has('aaa') ? true false"], 'E109:') enddef ! def RunNested(i: number): number var x: number = 0 if i % 2 if 1 --- 1590,1602 ---- enddef def Test_if_const_expr_fails() ! v9.CheckDefFailure(['if "aaa" == "bbb'], 'E114:') ! v9.CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') ! v9.CheckDefFailure(["if has('aaa'"], 'E110:') ! v9.CheckDefFailure(["if has('aaa') ? true false"], 'E109:') enddef ! def s:RunNested(i: number): number var x: number = 0 if i % 2 if 1 *************** *** 1645,1658 **** var n = true execute 'echomsg' (n ? '"true"' : '"no"') ! assert_match('^true$', Screenline(&lines)) echomsg [1, 2, 3] {a: 1, b: 2} ! assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) ! CheckDefFailure(['execute xxx'], 'E1001:', 1) ! CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) ! CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) enddef def Test_execute_cmd_vimscript() --- 1645,1658 ---- var n = true execute 'echomsg' (n ? '"true"' : '"no"') ! assert_match('^true$', g:Screenline(&lines)) echomsg [1, 2, 3] {a: 1, b: 2} ! assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', g:Screenline(&lines)) ! v9.CheckDefFailure(['execute xxx'], 'E1001:', 1) ! v9.CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) ! v9.CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) enddef def Test_execute_cmd_vimscript() *************** *** 1665,1698 **** assert_equal(28, g:someVar) unlet g:someVar END ! CheckScriptSuccess(lines) enddef def Test_echo_cmd() echo 'some' # comment echon 'thing' ! assert_match('^something$', Screenline(&lines)) echo "some" # comment echon "thing" ! assert_match('^something$', Screenline(&lines)) var str1 = 'some' var str2 = 'more' echo str1 str2 ! assert_match('^some more$', Screenline(&lines)) ! CheckDefFailure(['echo "xxx"# comment'], 'E488:') enddef def Test_echomsg_cmd() echomsg 'some' 'more' # comment ! assert_match('^some more$', Screenline(&lines)) echo 'clear' :1messages ! assert_match('^some more$', Screenline(&lines)) ! CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') enddef def Test_echomsg_cmd_vimscript() --- 1665,1698 ---- assert_equal(28, g:someVar) unlet g:someVar END ! v9.CheckScriptSuccess(lines) enddef def Test_echo_cmd() echo 'some' # comment echon 'thing' ! assert_match('^something$', g:Screenline(&lines)) echo "some" # comment echon "thing" ! assert_match('^something$', g:Screenline(&lines)) var str1 = 'some' var str2 = 'more' echo str1 str2 ! assert_match('^some more$', g:Screenline(&lines)) ! v9.CheckDefFailure(['echo "xxx"# comment'], 'E488:') enddef def Test_echomsg_cmd() echomsg 'some' 'more' # comment ! assert_match('^some more$', g:Screenline(&lines)) echo 'clear' :1messages ! assert_match('^some more$', g:Screenline(&lines)) ! v9.CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') enddef def Test_echomsg_cmd_vimscript() *************** *** 1702,1710 **** echomsg 'here' .. ' is ' .. 'a message' ! assert_match('^here is a message$', Screenline(&lines)) END ! CheckScriptSuccess(lines) enddef def Test_echoerr_cmd() --- 1702,1710 ---- echomsg 'here' .. ' is ' .. 'a message' ! assert_match('^here is a message$', g:Screenline(&lines)) END ! v9.CheckScriptSuccess(lines) enddef def Test_echoerr_cmd() *************** *** 1728,1734 **** assert_match('this is wrong', v:exception) endtry END ! CheckScriptSuccess(lines) enddef def Test_echoconsole_cmd() --- 1728,1734 ---- assert_match('this is wrong', v:exception) endtry END ! v9.CheckScriptSuccess(lines) enddef def Test_echoconsole_cmd() *************** *** 1786,1792 **** endif assert_equal([3, 4], result) END ! CheckDefAndScriptSuccess(lines) # test skipped blocks at inside of function lines =<< trim END --- 1786,1792 ---- endif assert_equal([3, 4], result) END ! v9.CheckDefAndScriptSuccess(lines) # test skipped blocks at inside of function lines =<< trim END *************** *** 1820,1826 **** enddef DefFalse() END ! CheckDefAndScriptSuccess(lines) enddef def Test_for_loop() --- 1820,1826 ---- enddef DefFalse() END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_for_loop() *************** *** 1931,1937 **** endfor assert_equal(['x', 'x', 'x'], reslist) END ! CheckDefAndScriptSuccess(lines) enddef def Test_for_loop_with_closure() --- 1931,1937 ---- endfor assert_equal(['x', 'x', 'x'], reslist) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_for_loop_with_closure() *************** *** 1945,1951 **** assert_equal(4, flist[i]()) endfor END ! CheckDefAndScriptSuccess(lines) lines =<< trim END var flist: list --- 1945,1951 ---- assert_equal(4, flist[i]()) endfor END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END var flist: list *************** *** 1959,1987 **** assert_equal(4, flist[i]()) endfor END ! CheckDefAndScriptSuccess(lines) enddef def Test_for_loop_fails() ! CheckDefAndScriptFailure(['for '], ['E1097:', 'E690:']) ! CheckDefAndScriptFailure(['for x'], ['E1097:', 'E690:']) ! CheckDefAndScriptFailure(['for x in'], ['E1097:', 'E15:']) ! CheckDefAndScriptFailure(['for # in range(5)'], 'E690:') ! CheckDefAndScriptFailure(['for i In range(5)'], 'E690:') ! CheckDefAndScriptFailure(['var x = 5', 'for x in range(5)', 'endfor'], ['E1017:', 'E1041:']) ! CheckScriptFailure(['vim9script', 'var x = 5', 'for x in range(5)', '# comment', 'endfor'], 'E1041:', 3) ! CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') delfunc! g:Func ! CheckDefFailure(['for i in xxx'], 'E1001:') ! CheckDefFailure(['endfor'], 'E588:') ! CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') # wrong type detected at compile time ! CheckDefFailure(['for i in {a: 1}', 'echo 3', 'endfor'], 'E1177: For loop on dict not supported') # wrong type detected at runtime g:adict = {a: 1} ! CheckDefExecFailure(['for i in g:adict', 'echo 3', 'endfor'], 'E1177: For loop on dict not supported') unlet g:adict var lines =<< trim END --- 1959,1987 ---- assert_equal(4, flist[i]()) endfor END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_for_loop_fails() ! v9.CheckDefAndScriptFailure(['for '], ['E1097:', 'E690:']) ! v9.CheckDefAndScriptFailure(['for x'], ['E1097:', 'E690:']) ! v9.CheckDefAndScriptFailure(['for x in'], ['E1097:', 'E15:']) ! v9.CheckDefAndScriptFailure(['for # in range(5)'], 'E690:') ! v9.CheckDefAndScriptFailure(['for i In range(5)'], 'E690:') ! v9.CheckDefAndScriptFailure(['var x = 5', 'for x in range(5)', 'endfor'], ['E1017:', 'E1041:']) ! v9.CheckScriptFailure(['vim9script', 'var x = 5', 'for x in range(5)', '# comment', 'endfor'], 'E1041:', 3) ! v9.CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') delfunc! g:Func ! v9.CheckDefFailure(['for i in xxx'], 'E1001:') ! v9.CheckDefFailure(['endfor'], 'E588:') ! v9.CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') # wrong type detected at compile time ! v9.CheckDefFailure(['for i in {a: 1}', 'echo 3', 'endfor'], 'E1177: For loop on dict not supported') # wrong type detected at runtime g:adict = {a: 1} ! v9.CheckDefExecFailure(['for i in g:adict', 'echo 3', 'endfor'], 'E1177: For loop on dict not supported') unlet g:adict var lines =<< trim END *************** *** 1990,2009 **** e = {a: 0, b: ''} endfor END ! CheckDefAndScriptFailure(lines, ['E1018:', 'E46:'], 3) lines =<< trim END for nr: number in ['foo'] endfor END ! CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got string', 1) lines =<< trim END for n : number in [1, 2] echo n endfor END ! CheckDefAndScriptFailure(lines, 'E1059:', 1) lines =<< trim END var d: dict = {a: 1, b: 2} --- 1990,2009 ---- e = {a: 0, b: ''} endfor END ! v9.CheckDefAndScriptFailure(lines, ['E1018:', 'E46:'], 3) lines =<< trim END for nr: number in ['foo'] endfor END ! v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got string', 1) lines =<< trim END for n : number in [1, 2] echo n endfor END ! v9.CheckDefAndScriptFailure(lines, 'E1059:', 1) lines =<< trim END var d: dict = {a: 1, b: 2} *************** *** 2011,2017 **** echo k v endfor END ! CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected job but got string', 2) lines =<< trim END var i = 0 --- 2011,2017 ---- echo k v endfor END ! v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected job but got string', 2) lines =<< trim END var i = 0 *************** *** 2019,2025 **** echo i endfor END ! CheckDefExecAndScriptFailure(lines, ['E1017:', 'E1041:']) lines =<< trim END var l = [0] --- 2019,2025 ---- echo i endfor END ! v9.CheckDefExecAndScriptFailure(lines, ['E1017:', 'E1041:']) lines =<< trim END var l = [0] *************** *** 2027,2033 **** echo l[0] endfor END ! CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) lines =<< trim END var d = {x: 0} --- 2027,2033 ---- echo l[0] endfor END ! v9.CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) lines =<< trim END var d = {x: 0} *************** *** 2035,2046 **** echo d.x endfor END ! CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) enddef def Test_for_loop_script_var() # cannot use s:var in a :def function ! CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1254:') # can use s:var in Vim9 script, with or without s: var lines =<< trim END --- 2035,2046 ---- echo d.x endfor END ! v9.CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) enddef def Test_for_loop_script_var() # cannot use s:var in a :def function ! v9.CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1254:') # can use s:var in Vim9 script, with or without s: var lines =<< trim END *************** *** 2107,2134 **** endfor assert_equal([2, 5], res) END ! CheckDefAndScriptSuccess(lines) lines =<< trim END for [v1, v2] in [[1, 2, 3], [3, 4]] echo v1 v2 endfor END ! CheckDefExecFailure(lines, 'E710:', 1) lines =<< trim END for [v1, v2] in [[1], [3, 4]] echo v1 v2 endfor END ! CheckDefExecFailure(lines, 'E711:', 1) lines =<< trim END for [v1, v1] in [[1, 2], [3, 4]] echo v1 endfor END ! CheckDefExecFailure(lines, 'E1017:', 1) enddef def Test_for_loop_with_try_continue() --- 2107,2134 ---- endfor assert_equal([2, 5], res) END ! v9.CheckDefAndScriptSuccess(lines) lines =<< trim END for [v1, v2] in [[1, 2, 3], [3, 4]] echo v1 v2 endfor END ! v9.CheckDefExecFailure(lines, 'E710:', 1) lines =<< trim END for [v1, v2] in [[1], [3, 4]] echo v1 v2 endfor END ! v9.CheckDefExecFailure(lines, 'E711:', 1) lines =<< trim END for [v1, v1] in [[1, 2], [3, 4]] echo v1 endfor END ! v9.CheckDefExecFailure(lines, 'E1017:', 1) enddef def Test_for_loop_with_try_continue() *************** *** 2148,2154 **** assert_equal(3, looped) assert_equal(3, cleanup) END ! CheckDefAndScriptSuccess(lines) enddef def Test_while_skipped_block() --- 2148,2154 ---- assert_equal(3, looped) assert_equal(3, cleanup) END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_while_skipped_block() *************** *** 2187,2193 **** endif assert_equal([3, 4], result) END ! CheckDefAndScriptSuccess(lines) # test skipped blocks at inside of function lines =<< trim END --- 2187,2193 ---- endif assert_equal([3, 4], result) END ! v9.CheckDefAndScriptSuccess(lines) # test skipped blocks at inside of function lines =<< trim END *************** *** 2231,2237 **** enddef DefFalse() END ! CheckDefAndScriptSuccess(lines) enddef def Test_while_loop() --- 2231,2237 ---- enddef DefFalse() END ! v9.CheckDefAndScriptSuccess(lines) enddef def Test_while_loop() *************** *** 2266,2289 **** endwhile assert_equal('v0v1v2', result) END ! CheckScriptSuccess(lines) enddef def Test_while_loop_fails() ! CheckDefFailure(['while xxx'], 'E1001:') ! CheckDefFailure(['endwhile'], 'E588:') ! CheckDefFailure(['continue'], 'E586:') ! CheckDefFailure(['if true', 'continue'], 'E586:') ! CheckDefFailure(['break'], 'E587:') ! CheckDefFailure(['if true', 'break'], 'E587:') ! CheckDefFailure(['while 1', 'echo 3'], 'E170:') var lines =<< trim END var s = '' while s = '' endwhile END ! CheckDefFailure(lines, 'E488:') enddef def Test_interrupt_loop() --- 2266,2289 ---- endwhile assert_equal('v0v1v2', result) END ! v9.CheckScriptSuccess(lines) enddef def Test_while_loop_fails() ! v9.CheckDefFailure(['while xxx'], 'E1001:') ! v9.CheckDefFailure(['endwhile'], 'E588:') ! v9.CheckDefFailure(['continue'], 'E586:') ! v9.CheckDefFailure(['if true', 'continue'], 'E586:') ! v9.CheckDefFailure(['break'], 'E587:') ! v9.CheckDefFailure(['if true', 'break'], 'E587:') ! v9.CheckDefFailure(['while 1', 'echo 3'], 'E170:') var lines =<< trim END var s = '' while s = '' endwhile END ! v9.CheckDefFailure(lines, 'E488:') enddef def Test_interrupt_loop() *************** *** 2342,2348 **** enddef def Test_vim9_comment() ! CheckScriptSuccess([ 'vim9script', '# something', '#something', --- 2342,2348 ---- enddef def Test_vim9_comment() ! v9.CheckScriptSuccess([ 'vim9script', '# something', '#something', *************** *** 2350,2475 **** ]) split Xfile ! CheckScriptSuccess([ 'vim9script', 'edit #something', ]) ! CheckScriptSuccess([ 'vim9script', 'edit #{something', ]) close ! CheckScriptFailure([ 'vim9script', ':# something', ], 'E488:') ! CheckScriptFailure([ '# something', ], 'E488:') ! CheckScriptFailure([ ':# something', ], 'E488:') { # block start } # block end ! CheckDefFailure([ '{# comment', ], 'E488:') ! CheckDefFailure([ '{', '}# comment', ], 'E488:') echo "yes" # comment ! CheckDefFailure([ 'echo "yes"# comment', ], 'E488:') ! CheckScriptSuccess([ 'vim9script', 'echo "yes" # something', ]) ! CheckScriptFailure([ 'vim9script', 'echo "yes"# something', ], 'E121:') ! CheckScriptFailure([ 'vim9script', 'echo# something', ], 'E1144:') ! CheckScriptFailure([ 'echo "yes" # something', ], 'E121:') exe "echo" # comment ! CheckDefFailure([ 'exe "echo"# comment', ], 'E488:') ! CheckScriptSuccess([ 'vim9script', 'exe "echo" # something', ]) ! CheckScriptFailure([ 'vim9script', 'exe "echo"# something', ], 'E121:') ! CheckScriptFailure([ 'vim9script', 'exe# something', ], 'E1144:') ! CheckScriptFailure([ 'exe "echo" # something', ], 'E121:') ! CheckDefFailure([ 'try# comment', ' echo "yes"', 'catch', 'endtry', ], 'E1144:') ! CheckScriptFailure([ 'vim9script', 'try# comment', 'echo "yes"', ], 'E1144:') ! CheckDefFailure([ 'try', ' throw#comment', 'catch', 'endtry', ], 'E1144:') ! CheckDefFailure([ 'try', ' throw "yes"#comment', 'catch', 'endtry', ], 'E488:') ! CheckDefFailure([ 'try', ' echo "yes"', 'catch# comment', 'endtry', ], 'E1144:') ! CheckScriptFailure([ 'vim9script', 'try', ' echo "yes"', 'catch# comment', 'endtry', ], 'E1144:') ! CheckDefFailure([ 'try', ' echo "yes"', 'catch /pat/# comment', 'endtry', ], 'E488:') ! CheckDefFailure([ 'try', 'echo "yes"', 'catch', 'endtry# comment', ], 'E1144:') ! CheckScriptFailure([ 'vim9script', 'try', ' echo "yes"', --- 2350,2475 ---- ]) split Xfile ! v9.CheckScriptSuccess([ 'vim9script', 'edit #something', ]) ! v9.CheckScriptSuccess([ 'vim9script', 'edit #{something', ]) close ! v9.CheckScriptFailure([ 'vim9script', ':# something', ], 'E488:') ! v9.CheckScriptFailure([ '# something', ], 'E488:') ! v9.CheckScriptFailure([ ':# something', ], 'E488:') { # block start } # block end ! v9.CheckDefFailure([ '{# comment', ], 'E488:') ! v9.CheckDefFailure([ '{', '}# comment', ], 'E488:') echo "yes" # comment ! v9.CheckDefFailure([ 'echo "yes"# comment', ], 'E488:') ! v9.CheckScriptSuccess([ 'vim9script', 'echo "yes" # something', ]) ! v9.CheckScriptFailure([ 'vim9script', 'echo "yes"# something', ], 'E121:') ! v9.CheckScriptFailure([ 'vim9script', 'echo# something', ], 'E1144:') ! v9.CheckScriptFailure([ 'echo "yes" # something', ], 'E121:') exe "echo" # comment ! v9.CheckDefFailure([ 'exe "echo"# comment', ], 'E488:') ! v9.CheckScriptSuccess([ 'vim9script', 'exe "echo" # something', ]) ! v9.CheckScriptFailure([ 'vim9script', 'exe "echo"# something', ], 'E121:') ! v9.CheckScriptFailure([ 'vim9script', 'exe# something', ], 'E1144:') ! v9.CheckScriptFailure([ 'exe "echo" # something', ], 'E121:') ! v9.CheckDefFailure([ 'try# comment', ' echo "yes"', 'catch', 'endtry', ], 'E1144:') ! v9.CheckScriptFailure([ 'vim9script', 'try# comment', 'echo "yes"', ], 'E1144:') ! v9.CheckDefFailure([ 'try', ' throw#comment', 'catch', 'endtry', ], 'E1144:') ! v9.CheckDefFailure([ 'try', ' throw "yes"#comment', 'catch', 'endtry', ], 'E488:') ! v9.CheckDefFailure([ 'try', ' echo "yes"', 'catch# comment', 'endtry', ], 'E1144:') ! v9.CheckScriptFailure([ 'vim9script', 'try', ' echo "yes"', 'catch# comment', 'endtry', ], 'E1144:') ! v9.CheckDefFailure([ 'try', ' echo "yes"', 'catch /pat/# comment', 'endtry', ], 'E488:') ! v9.CheckDefFailure([ 'try', 'echo "yes"', 'catch', 'endtry# comment', ], 'E1144:') ! v9.CheckScriptFailure([ 'vim9script', 'try', ' echo "yes"', *************** *** 2477,2668 **** 'endtry# comment', ], 'E1144:') ! CheckScriptSuccess([ 'vim9script', 'hi # comment', ]) ! CheckScriptFailure([ 'vim9script', 'hi# comment', ], 'E1144:') ! CheckScriptSuccess([ 'vim9script', 'hi Search # comment', ]) ! CheckScriptFailure([ 'vim9script', 'hi Search# comment', ], 'E416:') ! CheckScriptSuccess([ 'vim9script', 'hi link This Search # comment', ]) ! CheckScriptFailure([ 'vim9script', 'hi link This That# comment', ], 'E413:') ! CheckScriptSuccess([ 'vim9script', 'hi clear This # comment', 'hi clear # comment', ]) # not tested, because it doesn't give an error but a warning: # hi clear This# comment', ! CheckScriptFailure([ 'vim9script', 'hi clear# comment', ], 'E416:') ! CheckScriptSuccess([ 'vim9script', 'hi Group term=bold', 'match Group /todo/ # comment', ]) ! CheckScriptFailure([ 'vim9script', 'hi Group term=bold', 'match Group /todo/# comment', ], 'E488:') ! CheckScriptSuccess([ 'vim9script', 'match # comment', ]) ! CheckScriptFailure([ 'vim9script', 'match# comment', ], 'E1144:') ! CheckScriptSuccess([ 'vim9script', 'match none # comment', ]) ! CheckScriptFailure([ 'vim9script', 'match none# comment', ], 'E475:') ! CheckScriptSuccess([ 'vim9script', 'menutrans clear # comment', ]) ! CheckScriptFailure([ 'vim9script', 'menutrans clear# comment text', ], 'E474:') ! CheckScriptSuccess([ 'vim9script', 'syntax clear # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax clear# comment text', ], 'E28:') ! CheckScriptSuccess([ 'vim9script', 'syntax keyword Word some', 'syntax clear Word # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax keyword Word some', 'syntax clear Word# comment text', ], 'E28:') ! CheckScriptSuccess([ 'vim9script', 'syntax list # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax list# comment text', ], 'E28:') ! CheckScriptSuccess([ 'vim9script', 'syntax match Word /pat/ oneline # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/ oneline# comment', ], 'E475:') ! CheckScriptSuccess([ 'vim9script', 'syntax keyword Word word # comm[ent', ]) ! CheckScriptFailure([ 'vim9script', 'syntax keyword Word word# comm[ent', ], 'E789:') ! CheckScriptSuccess([ 'vim9script', 'syntax match Word /pat/ # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/# comment', ], 'E402:') ! CheckScriptSuccess([ 'vim9script', 'syntax match Word /pat/ contains=Something # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/ contains=Something# comment', ], 'E475:') ! CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/ contains= # comment', ], 'E406:') ! CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/ contains=# comment', ], 'E475:') ! CheckScriptSuccess([ 'vim9script', 'syntax region Word start=/pat/ end=/pat/ # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax region Word start=/pat/ end=/pat/# comment', ], 'E402:') ! CheckScriptSuccess([ 'vim9script', 'syntax sync # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax sync# comment', ], 'E404:') ! CheckScriptSuccess([ 'vim9script', 'syntax sync ccomment # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax sync ccomment# comment', ], 'E404:') ! CheckScriptSuccess([ 'vim9script', 'syntax cluster Some contains=Word # comment', ]) ! CheckScriptFailure([ 'vim9script', 'syntax cluster Some contains=Word# comment', ], 'E475:') ! CheckScriptSuccess([ 'vim9script', 'command Echo echo # comment', 'command Echo # comment', 'delcommand Echo', ]) ! CheckScriptFailure([ 'vim9script', 'command Echo echo# comment', 'Echo', --- 2477,2668 ---- 'endtry# comment', ], 'E1144:') ! v9.CheckScriptSuccess([ 'vim9script', 'hi # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'hi# comment', ], 'E1144:') ! v9.CheckScriptSuccess([ 'vim9script', 'hi Search # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'hi Search# comment', ], 'E416:') ! v9.CheckScriptSuccess([ 'vim9script', 'hi link This Search # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'hi link This That# comment', ], 'E413:') ! v9.CheckScriptSuccess([ 'vim9script', 'hi clear This # comment', 'hi clear # comment', ]) # not tested, because it doesn't give an error but a warning: # hi clear This# comment', ! v9.CheckScriptFailure([ 'vim9script', 'hi clear# comment', ], 'E416:') ! v9.CheckScriptSuccess([ 'vim9script', 'hi Group term=bold', 'match Group /todo/ # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'hi Group term=bold', 'match Group /todo/# comment', ], 'E488:') ! v9.CheckScriptSuccess([ 'vim9script', 'match # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'match# comment', ], 'E1144:') ! v9.CheckScriptSuccess([ 'vim9script', 'match none # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'match none# comment', ], 'E475:') ! v9.CheckScriptSuccess([ 'vim9script', 'menutrans clear # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'menutrans clear# comment text', ], 'E474:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax clear # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax clear# comment text', ], 'E28:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax keyword Word some', 'syntax clear Word # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax keyword Word some', 'syntax clear Word# comment text', ], 'E28:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax list # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax list# comment text', ], 'E28:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax match Word /pat/ oneline # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/ oneline# comment', ], 'E475:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax keyword Word word # comm[ent', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax keyword Word word# comm[ent', ], 'E789:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax match Word /pat/ # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/# comment', ], 'E402:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax match Word /pat/ contains=Something # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/ contains=Something# comment', ], 'E475:') ! v9.CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/ contains= # comment', ], 'E406:') ! v9.CheckScriptFailure([ 'vim9script', 'syntax match Word /pat/ contains=# comment', ], 'E475:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax region Word start=/pat/ end=/pat/ # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax region Word start=/pat/ end=/pat/# comment', ], 'E402:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax sync # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax sync# comment', ], 'E404:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax sync ccomment # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax sync ccomment# comment', ], 'E404:') ! v9.CheckScriptSuccess([ 'vim9script', 'syntax cluster Some contains=Word # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'syntax cluster Some contains=Word# comment', ], 'E475:') ! v9.CheckScriptSuccess([ 'vim9script', 'command Echo echo # comment', 'command Echo # comment', 'delcommand Echo', ]) ! v9.CheckScriptFailure([ 'vim9script', 'command Echo echo# comment', 'Echo', *************** *** 2670,2687 **** delcommand Echo var curdir = getcwd() ! CheckScriptSuccess([ 'command Echo cd " comment', 'Echo', 'delcommand Echo', ]) ! CheckScriptSuccess([ 'vim9script', 'command Echo cd # comment', 'Echo', 'delcommand Echo', ]) ! CheckScriptFailure([ 'vim9script', 'command Echo cd " comment', 'Echo', --- 2670,2687 ---- delcommand Echo var curdir = getcwd() ! v9.CheckScriptSuccess([ 'command Echo cd " comment', 'Echo', 'delcommand Echo', ]) ! v9.CheckScriptSuccess([ 'vim9script', 'command Echo cd # comment', 'Echo', 'delcommand Echo', ]) ! v9.CheckScriptFailure([ 'vim9script', 'command Echo cd " comment', 'Echo', *************** *** 2689,2774 **** delcommand Echo chdir(curdir) ! CheckScriptFailure([ 'vim9script', 'command Echo# comment', ], 'E182:') ! CheckScriptFailure([ 'vim9script', 'command Echo echo', 'command Echo# comment', ], 'E182:') delcommand Echo ! CheckScriptSuccess([ 'vim9script', 'function # comment', ]) ! CheckScriptFailure([ 'vim9script', 'function " comment', ], 'E129:') ! CheckScriptFailure([ 'vim9script', 'function# comment', ], 'E1144:') ! CheckScriptSuccess([ 'vim9script', ! 'function CheckScriptSuccess # comment', ]) ! CheckScriptFailure([ 'vim9script', ! 'function CheckScriptSuccess# comment', ! ], 'E488:') ! CheckScriptSuccess([ 'vim9script', 'func g:DeleteMeA()', 'endfunc', 'delfunction g:DeleteMeA # comment', ]) ! CheckScriptFailure([ 'vim9script', 'func g:DeleteMeB()', 'endfunc', 'delfunction g:DeleteMeB# comment', ], 'E488:') ! CheckScriptSuccess([ 'vim9script', 'call execute("ls") # comment', ]) ! CheckScriptFailure([ 'vim9script', 'call execute("ls")# comment', ], 'E488:') ! CheckScriptFailure([ 'def Test() " comment', 'enddef', ], 'E488:') ! CheckScriptFailure([ 'vim9script', 'def Test() " comment', 'enddef', ], 'E488:') ! CheckScriptSuccess([ 'func Test() " comment', 'endfunc', 'delfunc Test', ]) ! CheckScriptSuccess([ 'vim9script', 'func Test() " comment', 'endfunc', ]) ! CheckScriptSuccess([ 'def Test() # comment', 'enddef', ]) ! CheckScriptFailure([ 'func Test() # comment', 'endfunc', ], 'E488:') --- 2689,2776 ---- delcommand Echo chdir(curdir) ! v9.CheckScriptFailure([ 'vim9script', 'command Echo# comment', ], 'E182:') ! v9.CheckScriptFailure([ 'vim9script', 'command Echo echo', 'command Echo# comment', ], 'E182:') delcommand Echo ! v9.CheckScriptSuccess([ 'vim9script', 'function # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'function " comment', ], 'E129:') ! v9.CheckScriptFailure([ 'vim9script', 'function# comment', ], 'E1144:') ! v9.CheckScriptSuccess([ 'vim9script', ! 'import "./vim9.vim" as v9', ! 'function v9.CheckScriptSuccess # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', ! 'import "./vim9.vim" as v9', ! 'function v9.CheckScriptSuccess# comment', ! ], 'E1048: Item not found in script: CheckScriptSuccess#') ! v9.CheckScriptSuccess([ 'vim9script', 'func g:DeleteMeA()', 'endfunc', 'delfunction g:DeleteMeA # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'func g:DeleteMeB()', 'endfunc', 'delfunction g:DeleteMeB# comment', ], 'E488:') ! v9.CheckScriptSuccess([ 'vim9script', 'call execute("ls") # comment', ]) ! v9.CheckScriptFailure([ 'vim9script', 'call execute("ls")# comment', ], 'E488:') ! v9.CheckScriptFailure([ 'def Test() " comment', 'enddef', ], 'E488:') ! v9.CheckScriptFailure([ 'vim9script', 'def Test() " comment', 'enddef', ], 'E488:') ! v9.CheckScriptSuccess([ 'func Test() " comment', 'endfunc', 'delfunc Test', ]) ! v9.CheckScriptSuccess([ 'vim9script', 'func Test() " comment', 'endfunc', ]) ! v9.CheckScriptSuccess([ 'def Test() # comment', 'enddef', ]) ! v9.CheckScriptFailure([ 'func Test() # comment', 'endfunc', ], 'E488:') *************** *** 2783,2789 **** #\ comment \ end='bar' END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 2785,2791 ---- #\ comment \ end='bar' END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 2792,2808 **** "\ comment \ end='bar' END ! CheckScriptFailure(lines, 'E399:') enddef def Test_vim9_comment_gui() CheckCanRunGui ! CheckScriptFailure([ 'vim9script', 'gui#comment' ], 'E1144:') ! CheckScriptFailure([ 'vim9script', 'gui -f#comment' ], 'E194:') --- 2794,2810 ---- "\ comment \ end='bar' END ! v9.CheckScriptFailure(lines, 'E399:') enddef def Test_vim9_comment_gui() CheckCanRunGui ! v9.CheckScriptFailure([ 'vim9script', 'gui#comment' ], 'E1144:') ! v9.CheckScriptFailure([ 'vim9script', 'gui -f#comment' ], 'E194:') *************** *** 2828,2834 **** au! TabEnter unlet g:entered ! CheckScriptSuccess([ 'vim9script', 'g:var = 123', 'b:var = 456', --- 2830,2836 ---- au! TabEnter unlet g:entered ! v9.CheckScriptSuccess([ 'vim9script', 'g:var = 123', 'b:var = 456', *************** *** 2837,2889 **** 'unlet g:var w:var # something', ]) ! CheckScriptFailure([ 'vim9script', 'let var = 123', ], 'E1126: Cannot use :let in Vim9 script') ! CheckScriptFailure([ 'vim9script', 'var g:var = 123', ], 'E1016: Cannot declare a global variable:') ! CheckScriptFailure([ 'vim9script', 'var b:var = 123', ], 'E1016: Cannot declare a buffer variable:') ! CheckScriptFailure([ 'vim9script', 'var w:var = 123', ], 'E1016: Cannot declare a window variable:') ! CheckScriptFailure([ 'vim9script', 'var t:var = 123', ], 'E1016: Cannot declare a tab variable:') ! CheckScriptFailure([ 'vim9script', 'var v:version = 123', ], 'E1016: Cannot declare a v: variable:') ! CheckScriptFailure([ 'vim9script', 'var $VARIABLE = "text"', ], 'E1016: Cannot declare an environment variable:') ! CheckScriptFailure([ 'vim9script', 'g:var = 123', 'unlet g:var# comment1', ], 'E108:') ! CheckScriptFailure([ 'let g:var = 123', 'unlet g:var # something', ], 'E488:') ! CheckScriptSuccess([ 'vim9script', 'if 1 # comment2', ' echo "yes"', --- 2839,2891 ---- 'unlet g:var w:var # something', ]) ! v9.CheckScriptFailure([ 'vim9script', 'let var = 123', ], 'E1126: Cannot use :let in Vim9 script') ! v9.CheckScriptFailure([ 'vim9script', 'var g:var = 123', ], 'E1016: Cannot declare a global variable:') ! v9.CheckScriptFailure([ 'vim9script', 'var b:var = 123', ], 'E1016: Cannot declare a buffer variable:') ! v9.CheckScriptFailure([ 'vim9script', 'var w:var = 123', ], 'E1016: Cannot declare a window variable:') ! v9.CheckScriptFailure([ 'vim9script', 'var t:var = 123', ], 'E1016: Cannot declare a tab variable:') ! v9.CheckScriptFailure([ 'vim9script', 'var v:version = 123', ], 'E1016: Cannot declare a v: variable:') ! v9.CheckScriptFailure([ 'vim9script', 'var $VARIABLE = "text"', ], 'E1016: Cannot declare an environment variable:') ! v9.CheckScriptFailure([ 'vim9script', 'g:var = 123', 'unlet g:var# comment1', ], 'E108:') ! v9.CheckScriptFailure([ 'let g:var = 123', 'unlet g:var # something', ], 'E488:') ! v9.CheckScriptSuccess([ 'vim9script', 'if 1 # comment2', ' echo "yes"', *************** *** 2892,2905 **** 'endif', ]) ! CheckScriptFailure([ 'vim9script', 'if 1# comment3', ' echo "yes"', 'endif', ], 'E488:') ! CheckScriptFailure([ 'vim9script', 'if 0 # comment4', ' echo "yes"', --- 2894,2907 ---- 'endif', ]) ! v9.CheckScriptFailure([ 'vim9script', 'if 1# comment3', ' echo "yes"', 'endif', ], 'E488:') ! v9.CheckScriptFailure([ 'vim9script', 'if 0 # comment4', ' echo "yes"', *************** *** 2908,2924 **** 'endif', ], 'E488:') ! CheckScriptSuccess([ 'vim9script', 'var v = 1 # comment5', ]) ! CheckScriptFailure([ 'vim9script', 'var v = 1# comment6', ], 'E488:') ! CheckScriptSuccess([ 'vim9script', 'new' 'setline(1, ["# define pat", "last"])', --- 2910,2926 ---- 'endif', ], 'E488:') ! v9.CheckScriptSuccess([ 'vim9script', 'var v = 1 # comment5', ]) ! v9.CheckScriptFailure([ 'vim9script', 'var v = 1# comment6', ], 'E488:') ! v9.CheckScriptSuccess([ 'vim9script', 'new' 'setline(1, ["# define pat", "last"])', *************** *** 2927,2933 **** 'bwipe!', ]) ! CheckScriptFailure([ 'vim9script', 'new' 'setline(1, ["# define pat", "last"])', --- 2929,2935 ---- 'bwipe!', ]) ! v9.CheckScriptFailure([ 'vim9script', 'new' 'setline(1, ["# define pat", "last"])', *************** *** 2936,2942 **** 'bwipe!', ], 'E488:') ! CheckScriptFailure([ 'vim9script', 'func! SomeFunc()', ], 'E477:') --- 2938,2944 ---- 'bwipe!', ], 'E488:') ! v9.CheckScriptFailure([ 'vim9script', 'func! SomeFunc()', ], 'E477:') *************** *** 3005,3011 **** endtry assert_match('E741: Value is locked: local', error) END ! CheckScriptSuccess(lines) enddef --- 3007,3013 ---- endtry assert_match('E741: Value is locked: local', error) END ! v9.CheckScriptSuccess(lines) enddef *************** *** 3065,3071 **** call assert_equal(2, s:counter) au! CursorHold END ! CheckScriptSuccess(lines) enddef def Test_error_in_autoload_script() --- 3067,3073 ---- call assert_equal(2, s:counter) au! CursorHold END ! v9.CheckScriptSuccess(lines) enddef def Test_error_in_autoload_script() *************** *** 3102,3108 **** Legacy() END ! CheckScriptSuccess(lines) &rtp = save_rtp delete(dir, 'rf') --- 3104,3110 ---- Legacy() END ! v9.CheckScriptSuccess(lines) &rtp = save_rtp delete(dir, 'rf') *************** *** 3111,3117 **** def Test_invalid_sid() assert_fails('func 1234_func', 'E123:') ! if RunVim([], ['wq! Xdidit'], '+"func 1_func"') assert_equal([], readfile('Xdidit')) endif delete('Xdidit') --- 3113,3119 ---- def Test_invalid_sid() assert_fails('func 1234_func', 'E123:') ! if g:RunVim([], ['wq! Xdidit'], '+"func 1_func"') assert_equal([], readfile('Xdidit')) endif delete('Xdidit') *************** *** 3120,3126 **** def Test_restoring_cpo() writefile(['vim9script', 'set nocp'], 'Xsourced') writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose') ! if RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose') assert_equal(['done'], readfile('Xdone')) endif delete('Xsourced') --- 3122,3128 ---- def Test_restoring_cpo() writefile(['vim9script', 'set nocp'], 'Xsourced') writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose') ! if g:RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose') assert_equal(['done'], readfile('Xdone')) endif delete('Xsourced') *************** *** 3169,3175 **** END writefile(lines, 'Xvim9') ! var cmd = GetVimCommand() .. " -S Xlegacy -S Xvim9" cmd = substitute(cmd, '-u NONE', '', '') exe "silent !" .. cmd --- 3171,3177 ---- END writefile(lines, 'Xvim9') ! var cmd = g:GetVimCommand() .. " -S Xlegacy -S Xvim9" cmd = substitute(cmd, '-u NONE', '', '') exe "silent !" .. cmd *************** *** 3208,3220 **** setline(1, 'some text') END call writefile(lines, 'XTest_redraw_cpo') ! let buf = RunVimInTerminal('-S XTest_redraw_cpo', {'rows': 6}) call term_sendkeys(buf, "V:") call VerifyScreenDump(buf, 'Test_vim9_no_redraw', {}) " clean up call term_sendkeys(buf, "\u") ! call StopVimInTerminal(buf) call delete('XTest_redraw_cpo') call delete('Xdir', 'rf') endfunc --- 3210,3222 ---- setline(1, 'some text') END call writefile(lines, 'XTest_redraw_cpo') ! let buf = g:RunVimInTerminal('-S XTest_redraw_cpo', {'rows': 6}) call term_sendkeys(buf, "V:") call VerifyScreenDump(buf, 'Test_vim9_no_redraw', {}) " clean up call term_sendkeys(buf, "\u") ! call g:StopVimInTerminal(buf) call delete('XTest_redraw_cpo') call delete('Xdir', 'rf') endfunc *************** *** 3225,3231 **** var name: any assert_equal(0, name) END ! CheckDefAndScriptSuccess(lines) enddef func Test_define_func_at_command_line() --- 3227,3233 ---- var name: any assert_equal(0, name) END ! v9.CheckDefAndScriptSuccess(lines) enddef func Test_define_func_at_command_line() *************** *** 3245,3257 **** END writefile([''], 'Xdidcmd') writefile(lines, 'XcallFunc') ! var buf = RunVimInTerminal('-S XcallFunc', {rows: 6}) # define Afunc() on the command line term_sendkeys(buf, ":def Afunc()\Bfunc()\enddef\") term_sendkeys(buf, ":call CheckAndQuit()\") ! WaitForAssert(() => assert_equal(['errors: []'], readfile('Xdidcmd'))) ! call StopVimInTerminal(buf) delete('XcallFunc') delete('Xdidcmd') enddef --- 3247,3259 ---- END writefile([''], 'Xdidcmd') writefile(lines, 'XcallFunc') ! var buf = g:RunVimInTerminal('-S XcallFunc', {rows: 6}) # define Afunc() on the command line term_sendkeys(buf, ":def Afunc()\Bfunc()\enddef\") term_sendkeys(buf, ":call CheckAndQuit()\") ! g:WaitForAssert(() => assert_equal(['errors: []'], readfile('Xdidcmd'))) ! call g:StopVimInTerminal(buf) delete('XcallFunc') delete('Xdidcmd') enddef *************** *** 3267,3273 **** echo one endif END ! CheckScriptFailure(lines, 'E121:', 7) lines =<< trim END vim9script --- 3269,3275 ---- echo one endif END ! v9.CheckScriptFailure(lines, 'E121:', 7) lines =<< trim END vim9script *************** *** 3282,3288 **** echo one endif END ! CheckScriptFailure(lines, 'E121:', 10) lines =<< trim END vim9script --- 3284,3290 ---- echo one endif END ! v9.CheckScriptFailure(lines, 'E121:', 10) lines =<< trim END vim9script *************** *** 3293,3299 **** endwhile echo one END ! CheckScriptFailure(lines, 'E121:', 7) lines =<< trim END vim9script --- 3295,3301 ---- endwhile echo one END ! v9.CheckScriptFailure(lines, 'E121:', 7) lines =<< trim END vim9script *************** *** 3303,3309 **** endfor echo one END ! CheckScriptFailure(lines, 'E121:', 6) lines =<< trim END vim9script --- 3305,3311 ---- endfor echo one END ! v9.CheckScriptFailure(lines, 'E121:', 6) lines =<< trim END vim9script *************** *** 3314,3320 **** assert_false(exists('one')) assert_false(exists('s:one')) END ! CheckScriptSuccess(lines) lines =<< trim END vim9script --- 3316,3322 ---- assert_false(exists('one')) assert_false(exists('s:one')) END ! v9.CheckScriptSuccess(lines) lines =<< trim END vim9script *************** *** 3324,3330 **** } echo one END ! CheckScriptFailure(lines, 'E121:', 6) enddef def Test_catch_exception_in_callback() --- 3326,3332 ---- } echo one END ! v9.CheckScriptFailure(lines, 'E121:', 6) enddef def Test_catch_exception_in_callback() *************** *** 3344,3350 **** popup_menu('popup', {callback: Callback}) feedkeys("\r", 'xt') END ! CheckScriptSuccess(lines) unlet g:caught enddef --- 3346,3352 ---- popup_menu('popup', {callback: Callback}) feedkeys("\r", 'xt') END ! v9.CheckScriptSuccess(lines) unlet g:caught enddef *************** *** 3396,3407 **** var lines =<< trim END exit_cb: Func}) END ! CheckDefAndScriptFailure(lines, 'E1144:', 1) lines =<< trim END e# END ! CheckDefAndScriptFailure(lines, 'E1144:', 1) enddef def Test_script_var_gone_when_sourced_twice() --- 3398,3409 ---- var lines =<< trim END exit_cb: Func}) END ! v9.CheckDefAndScriptFailure(lines, 'E1144:', 1) lines =<< trim END e# END ! v9.CheckDefAndScriptFailure(lines, 'E1144:', 1) enddef def Test_script_var_gone_when_sourced_twice() *************** *** 3438,3469 **** var lines =<< trim END ka END ! CheckDefFailure(lines, 'E476:') ! CheckScriptFailure(['vim9script'] + lines, 'E492:') lines =<< trim END :1ka END ! CheckDefFailure(lines, 'E476:') ! CheckScriptFailure(['vim9script'] + lines, 'E492:') lines =<< trim END t END ! CheckDefFailure(lines, 'E1100:') ! CheckScriptFailure(['vim9script'] + lines, 'E1100:') lines =<< trim END x END ! CheckDefFailure(lines, 'E1100:') ! CheckScriptFailure(['vim9script'] + lines, 'E1100:') lines =<< trim END xit END ! CheckDefFailure(lines, 'E1100:') ! CheckScriptFailure(['vim9script'] + lines, 'E1100:') enddef def Test_mapping_line_number() --- 3440,3471 ---- var lines =<< trim END ka END ! v9.CheckDefFailure(lines, 'E476:') ! v9.CheckScriptFailure(['vim9script'] + lines, 'E492:') lines =<< trim END :1ka END ! v9.CheckDefFailure(lines, 'E476:') ! v9.CheckScriptFailure(['vim9script'] + lines, 'E492:') lines =<< trim END t END ! v9.CheckDefFailure(lines, 'E1100:') ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1100:') lines =<< trim END x END ! v9.CheckDefFailure(lines, 'E1100:') ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1100:') lines =<< trim END xit END ! v9.CheckDefFailure(lines, 'E1100:') ! v9.CheckScriptFailure(['vim9script'] + lines, 'E1100:') enddef def Test_mapping_line_number() *************** *** 3485,3491 **** .. 'c' enddef END ! CheckScriptSuccess(lines) var res = execute('verbose nmap ') assert_match('No mapping found', res) --- 3487,3493 ---- .. 'c' enddef END ! v9.CheckScriptSuccess(lines) var res = execute('verbose nmap ') assert_match('No mapping found', res) *************** *** 3503,3509 **** set foldlevel =11 call assert_equal(11, &foldlevel) END ! CheckScriptSuccess(lines) set foldlevel set foldlevel=12 --- 3505,3511 ---- set foldlevel =11 call assert_equal(11, &foldlevel) END ! v9.CheckScriptSuccess(lines) set foldlevel set foldlevel=12 *************** *** 3516,3537 **** lines =<< trim END set foldlevel =1 END ! CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: =1') lines =<< trim END set foldlevel +=1 END ! CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: +=1') lines =<< trim END set foldlevel ^=1 END ! CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: ^=1') lines =<< trim END set foldlevel -=1 END ! CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: -=1') set foldlevel& enddef --- 3518,3539 ---- lines =<< trim END set foldlevel =1 END ! v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: =1') lines =<< trim END set foldlevel +=1 END ! v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: +=1') lines =<< trim END set foldlevel ^=1 END ! v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: ^=1') lines =<< trim END set foldlevel -=1 END ! v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: -=1') set foldlevel& enddef *************** *** 3542,3548 **** set hlsearch & hlsearch ! call assert_equal(1, &hlsearch) END ! CheckScriptSuccess(lines) set hlsearch set hlsearch! --- 3544,3550 ---- set hlsearch & hlsearch ! call assert_equal(1, &hlsearch) END ! v9.CheckScriptSuccess(lines) set hlsearch set hlsearch! *************** *** 3555,3566 **** lines =<< trim END set hlsearch & END ! CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: &') lines =<< trim END set hlsearch ! END ! CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: !') set hlsearch& enddef --- 3557,3568 ---- lines =<< trim END set hlsearch & END ! v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: &') lines =<< trim END set hlsearch ! END ! v9.CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: !') set hlsearch& enddef *************** *** 3572,3578 **** .. ' error' .. ' continued' END ! CheckDefExecAndScriptFailure(lines, 'some error continued', 1) enddef func Test_debug_with_lambda() --- 3574,3580 ---- .. ' error' .. ' continued' END ! v9.CheckDefExecAndScriptFailure(lines, 'some error continued', 1) enddef func Test_debug_with_lambda() *************** *** 3593,3605 **** Func() END writefile(lines, 'XdebugFunc') ! var buf = RunVimInTerminal('-S XdebugFunc', {rows: 6, wait_for_ruler: 0}) ! WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) term_sendkeys(buf, "cont\") ! WaitForAssert(() => assert_match('\[0\]', term_getline(buf, 5))) ! StopVimInTerminal(buf) delete('XdebugFunc') enddef --- 3595,3607 ---- Func() END writefile(lines, 'XdebugFunc') ! var buf = g:RunVimInTerminal('-S XdebugFunc', {rows: 6, wait_for_ruler: 0}) ! g:WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) term_sendkeys(buf, "cont\") ! g:WaitForAssert(() => assert_match('\[0\]', term_getline(buf, 5))) ! g:StopVimInTerminal(buf) delete('XdebugFunc') enddef *************** *** 3629,3654 **** Crash() END writefile(lines, 'XdebugFunc') ! var buf = RunVimInTerminal('-S XdebugFunc', {rows: 6, wait_for_ruler: 0}) ! WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) term_sendkeys(buf, "next\") ! TermWait(buf) ! WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) term_sendkeys(buf, "cont\") ! TermWait(buf) ! StopVimInTerminal(buf) delete('XdebugFunc') enddef ! def ProfiledWithLambda() var n = 3 echo [[1, 2], [3, 4]]->filter((_, l) => l[0] == n) enddef ! def ProfiledNested() var x = 0 def Nested(): any return x --- 3631,3656 ---- Crash() END writefile(lines, 'XdebugFunc') ! var buf = g:RunVimInTerminal('-S XdebugFunc', {rows: 6, wait_for_ruler: 0}) ! g:WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) term_sendkeys(buf, "next\") ! g:TermWait(buf) ! g:WaitForAssert(() => assert_match('^>', term_getline(buf, 6))) term_sendkeys(buf, "cont\") ! g:TermWait(buf) ! g:StopVimInTerminal(buf) delete('XdebugFunc') enddef ! def s:ProfiledWithLambda() var n = 3 echo [[1, 2], [3, 4]]->filter((_, l) => l[0] == n) enddef ! def s:ProfiledNested() var x = 0 def Nested(): any return x *************** *** 3671,3677 **** command CmdB echomsg 'CmdB' Cmd END ! CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 4) lines =<< trim END vim9script --- 3673,3679 ---- command CmdB echomsg 'CmdB' Cmd END ! v9.CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 4) lines =<< trim END vim9script *************** *** 3680,3693 **** enddef Func() END ! CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 1) lines =<< trim END vim9script nnoremap Cmd feedkeys("\", 'xt') END ! CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 3) delcommand CmdA delcommand CmdB --- 3682,3695 ---- enddef Func() END ! v9.CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 1) lines =<< trim END vim9script nnoremap Cmd feedkeys("\", 'xt') END ! v9.CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 3) delcommand CmdA delcommand CmdB *************** *** 3709,3715 **** # Also profile the nested function. Use a different function, although the # contents is the same, to make sure it was not already compiled. profile func * ! ProfiledNestedProfiled() profdel func * profile pause --- 3711,3717 ---- # Also profile the nested function. Use a different function, although the # contents is the same, to make sure it was not already compiled. profile func * ! g:ProfiledNestedProfiled() profdel func * profile pause *** ../vim-8.2.4256/src/testdir/test_blob.vim 2021-12-26 21:54:38.128433097 +0000 --- src/testdir/test_blob.vim 2022-01-29 20:27:20.078598128 +0000 *************** *** 1,6 **** " Tests for the Blob types ! source vim9.vim func TearDown() " Run garbage collection after every test --- 1,6 ---- " Tests for the Blob types ! import './vim9.vim' as v9 func TearDown() " Run garbage collection after every test *************** *** 39,45 **** call assert_equal(0, len(test_null_blob())) call assert_equal(0z, copy(test_null_blob())) END ! call CheckLegacyAndVim9Success(lines) endfunc " assignment to a blob --- 39,45 ---- call assert_equal(0, len(test_null_blob())) call assert_equal(0z, copy(test_null_blob())) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " assignment to a blob *************** *** 75,123 **** VAR m = deepcopy(l) LET m[0] = 0z34 #" E742 or E741 should not occur. END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b = 0zDEADBEEF LET b[2 : 3] = 0z112233 END ! call CheckLegacyAndVim9Failure(lines, 'E972:') let lines =<< trim END VAR b = 0zDEADBEEF LET b[2 : 3] = 0z11 END ! call CheckLegacyAndVim9Failure(lines, 'E972:') let lines =<< trim END VAR b = 0zDEADBEEF LET b[3 : 2] = 0z END ! call CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0zDEADBEEF LET b ..= 0z33 END ! call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1019:', 'E734:']) let lines =<< trim END VAR b = 0zDEADBEEF LET b ..= "xx" END ! call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1019:', 'E734:']) let lines =<< trim END VAR b = 0zDEADBEEF LET b += "xx" END ! call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:']) let lines =<< trim END VAR b = 0zDEADBEEF LET b[1 : 1] ..= 0z55 END ! call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1183:', 'E734:']) endfunc func Test_blob_get_range() --- 75,123 ---- VAR m = deepcopy(l) LET m[0] = 0z34 #" E742 or E741 should not occur. END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b = 0zDEADBEEF LET b[2 : 3] = 0z112233 END ! call v9.CheckLegacyAndVim9Failure(lines, 'E972:') let lines =<< trim END VAR b = 0zDEADBEEF LET b[2 : 3] = 0z11 END ! call v9.CheckLegacyAndVim9Failure(lines, 'E972:') let lines =<< trim END VAR b = 0zDEADBEEF LET b[3 : 2] = 0z END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0zDEADBEEF LET b ..= 0z33 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1019:', 'E734:']) let lines =<< trim END VAR b = 0zDEADBEEF LET b ..= "xx" END ! call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1019:', 'E734:']) let lines =<< trim END VAR b = 0zDEADBEEF LET b += "xx" END ! call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:']) let lines =<< trim END VAR b = 0zDEADBEEF LET b[1 : 1] ..= 0z55 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1183:', 'E734:']) endfunc func Test_blob_get_range() *************** *** 133,139 **** call assert_equal(0z, b[5 : 6]) call assert_equal(0z0011, b[-10 : 1]) END ! call CheckLegacyAndVim9Success(lines) " legacy script white space let b = 0z0011223344 --- 133,139 ---- call assert_equal(0z, b[5 : 6]) call assert_equal(0z0011, b[-10 : 1]) END ! call v9.CheckLegacyAndVim9Success(lines) " legacy script white space let b = 0z0011223344 *************** *** 158,176 **** call assert_equal(0x44, b[4]) call assert_equal(0x44, b[-1]) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b = 0z0011223344 echo b[5] END ! call CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0z0011223344 echo b[-8] END ! call CheckLegacyAndVim9Failure(lines, 'E979:') endfunc func Test_blob_to_string() --- 158,176 ---- call assert_equal(0x44, b[4]) call assert_equal(0x44, b[-1]) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b = 0z0011223344 echo b[5] END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0z0011223344 echo b[-8] END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') endfunc func Test_blob_to_string() *************** *** 184,190 **** call assert_equal('0z', string(b)) call assert_equal('0z', string(test_null_blob())) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_blob_compare() --- 184,190 ---- call assert_equal('0z', string(b)) call assert_equal('0z', string(test_null_blob())) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_blob_compare() *************** *** 211,264 **** call assert_false(b1 is b2) call assert_true(b1 isnot b2) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b1 = 0z0011 echo b1 == 9 END ! call CheckLegacyAndVim9Failure(lines, ['E977:', 'E1072', 'E1072']) let lines =<< trim END VAR b1 = 0z0011 echo b1 != 9 END ! call CheckLegacyAndVim9Failure(lines, ['E977:', 'E1072', 'E1072']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 > b2 END ! call CheckLegacyAndVim9Failure(lines, ['E978:', 'E1072:', 'E1072:']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 < b2 END ! call CheckLegacyAndVim9Failure(lines, ['E978:', 'E1072:', 'E1072:']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 - b2 END ! call CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 / b2 END ! call CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 * b2 END ! call CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:']) endfunc func Test_blob_index_assign() --- 211,264 ---- call assert_false(b1 is b2) call assert_true(b1 isnot b2) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b1 = 0z0011 echo b1 == 9 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E977:', 'E1072', 'E1072']) let lines =<< trim END VAR b1 = 0z0011 echo b1 != 9 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E977:', 'E1072', 'E1072']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 > b2 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E978:', 'E1072:', 'E1072:']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 < b2 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E978:', 'E1072:', 'E1072:']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 - b2 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 / b2 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:']) let lines =<< trim END VAR b1 = 0z0011 VAR b2 = 0z1100 VAR x = b1 * b2 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:']) endfunc func Test_blob_index_assign() *************** *** 268,286 **** LET b[2] = 0x22 call assert_equal(0z001122, b) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b = 0z00 LET b[2] = 0x33 END ! call CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0z00 LET b[-2] = 0x33 END ! call CheckLegacyAndVim9Failure(lines, 'E979:') endfunc func Test_blob_for_loop() --- 268,286 ---- LET b[2] = 0x22 call assert_equal(0z001122, b) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b = 0z00 LET b[2] = 0x33 END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0z00 LET b[-2] = 0x33 END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') endfunc func Test_blob_for_loop() *************** *** 313,319 **** endfor call assert_equal(5, i) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_blob_concatenate() --- 313,319 ---- endfor call assert_equal(5, i) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_blob_concatenate() *************** *** 325,343 **** LET b = 0zDEAD + 0zBEEF call assert_equal(0zDEADBEEF, b) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b = 0z0011 LET b += "a" END ! call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:']) let lines =<< trim END VAR b = 0z0011 LET b += 88 END ! call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:']) endfunc func Test_blob_add() --- 325,343 ---- LET b = 0zDEAD + 0zBEEF call assert_equal(0zDEADBEEF, b) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR b = 0z0011 LET b += "a" END ! call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:']) let lines =<< trim END VAR b = 0z0011 LET b += 88 END ! call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:']) endfunc func Test_blob_add() *************** *** 346,352 **** call add(b, 0x22) call assert_equal(0z001122, b) END ! call CheckLegacyAndVim9Success(lines) " Only works in legacy script let b = 0z0011 --- 346,352 ---- call add(b, 0x22) call assert_equal(0z001122, b) END ! call v9.CheckLegacyAndVim9Success(lines) " Only works in legacy script let b = 0z0011 *************** *** 358,375 **** VAR b = 0z0011 call add(b, [9]) END ! call CheckLegacyAndVim9Failure(lines, ['E745:', 'E1012:', 'E1210:']) let lines =<< trim END VAR b = 0z0011 call add("", 0x01) END ! call CheckLegacyAndVim9Failure(lines, ['E897:', 'E1013:', 'E1226:']) let lines =<< trim END add(test_null_blob(), 0x22) END ! call CheckDefExecAndScriptFailure(lines, 'E1131:') let lines =<< trim END let b = 0zDEADBEEF --- 358,375 ---- VAR b = 0z0011 call add(b, [9]) END ! call v9.CheckLegacyAndVim9Failure(lines, ['E745:', 'E1012:', 'E1210:']) let lines =<< trim END VAR b = 0z0011 call add("", 0x01) END ! call v9.CheckLegacyAndVim9Failure(lines, ['E897:', 'E1013:', 'E1226:']) let lines =<< trim END add(test_null_blob(), 0x22) END ! call v9.CheckDefExecAndScriptFailure(lines, 'E1131:') let lines =<< trim END let b = 0zDEADBEEF *************** *** 377,383 **** call add(b, 0) unlockvar b END ! call CheckScriptFailure(lines, 'E741:') endfunc func Test_blob_empty() --- 377,383 ---- call add(b, 0) unlockvar b END ! call v9.CheckScriptFailure(lines, 'E741:') endfunc func Test_blob_empty() *************** *** 411,442 **** call assert_equal(0zADBE, remove(b, 1, 2)) call assert_equal(0zDEEF, b) END ! call CheckLegacyAndVim9Success(lines) " Test invalid cases let lines =<< trim END VAR b = 0zDEADBEEF call remove(b, 5) END ! call CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0zDEADBEEF call remove(b, 1, 5) END ! call CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0zDEADBEEF call remove(b, 3, 2) END ! call CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0zDEADBEEF call remove(test_null_blob(), 1, 2) END ! call CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END let b = 0zDEADBEEF --- 411,442 ---- call assert_equal(0zADBE, remove(b, 1, 2)) call assert_equal(0zDEEF, b) END ! call v9.CheckLegacyAndVim9Success(lines) " Test invalid cases let lines =<< trim END VAR b = 0zDEADBEEF call remove(b, 5) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0zDEADBEEF call remove(b, 1, 5) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0zDEADBEEF call remove(b, 3, 2) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END VAR b = 0zDEADBEEF call remove(test_null_blob(), 1, 2) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E979:') let lines =<< trim END let b = 0zDEADBEEF *************** *** 444,450 **** call remove(b, 0) unlockvar b END ! call CheckScriptFailure(lines, 'E741:') " can only check at script level, not in a :def function let lines =<< trim END --- 444,450 ---- call remove(b, 0) unlockvar b END ! call v9.CheckScriptFailure(lines, 'E741:') " can only check at script level, not in a :def function let lines =<< trim END *************** *** 453,459 **** lockvar b remove(b, 0) END ! call CheckScriptFailure(lines, 'E741:') call assert_fails('echo remove(0z1020, [])', 'E745:') call assert_fails('echo remove(0z1020, 0, [])', 'E745:') --- 453,459 ---- lockvar b remove(b, 0) END ! call v9.CheckScriptFailure(lines, 'E741:') call assert_fails('echo remove(0z1020, [])', 'E745:') call assert_fails('echo remove(0z1020, 0, [])', 'E745:') *************** *** 467,473 **** call assert_equal(b, br) call delete('Xblob') END ! call CheckLegacyAndVim9Success(lines) " This was crashing when calling readfile() with a directory. call assert_fails("call readfile('.', 'B')", 'E17: "." is a directory') --- 467,473 ---- call assert_equal(b, br) call delete('Xblob') END ! call v9.CheckLegacyAndVim9Success(lines) " This was crashing when calling readfile() with a directory. call assert_fails("call readfile('.', 'B')", 'E17: "." is a directory') *************** *** 485,491 **** call assert_equal(0z01030103, filter(0z010203010203, 'v:val != 0x02')) call assert_equal(0zADEF, filter(0zDEADBEEF, 'v:key % 2')) END ! call CheckLegacyAndVim9Success(lines) call assert_fails('echo filter(0z10, "a10")', 'E121:') endfunc --- 485,491 ---- call assert_equal(0z01030103, filter(0z010203010203, 'v:val != 0x02')) call assert_equal(0zADEF, filter(0zDEADBEEF, 'v:key % 2')) END ! call v9.CheckLegacyAndVim9Success(lines) call assert_fails('echo filter(0z10, "a10")', 'E121:') endfunc *************** *** 496,507 **** call assert_equal(0z00010203, map(0zDEADBEEF, 'v:key')) call assert_equal(0zDEAEC0F2, map(0zDEADBEEF, 'v:key + v:val')) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END call map(0z00, '[9]') END ! call CheckLegacyAndVim9Failure(lines, 'E978:') call assert_fails('echo map(0z10, "a10")', 'E121:') endfunc --- 496,507 ---- call assert_equal(0z00010203, map(0zDEADBEEF, 'v:key')) call assert_equal(0zDEAEC0F2, map(0zDEADBEEF, 'v:key + v:val')) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END call map(0z00, '[9]') END ! call v9.CheckLegacyAndVim9Failure(lines, 'E978:') call assert_fails('echo map(0z10, "a10")', 'E121:') endfunc *************** *** 516,522 **** call assert_equal(0, index(0z11110111, 0x11, -10)) call assert_equal(-1, index(test_null_blob(), 1)) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_blob_insert() --- 516,522 ---- call assert_equal(0, index(0z11110111, 0x11, -10)) call assert_equal(-1, index(test_null_blob(), 1)) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_blob_insert() *************** *** 529,535 **** call insert(b, 0x33, 2) call assert_equal(0zDEAD33BEEF, b) END ! call CheckLegacyAndVim9Success(lines) " only works in legacy script call assert_equal(0, insert(test_null_blob(), 0x33)) --- 529,535 ---- call insert(b, 0x33, 2) call assert_equal(0zDEAD33BEEF, b) END ! call v9.CheckLegacyAndVim9Success(lines) " only works in legacy script call assert_equal(0, insert(test_null_blob(), 0x33)) *************** *** 538,579 **** VAR b = 0zDEADBEEF call insert(b, -1) END ! call CheckLegacyAndVim9Failure(lines, 'E475:') let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, 257) END ! call CheckLegacyAndVim9Failure(lines, 'E475:') let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, 0, [9]) END ! call CheckLegacyAndVim9Failure(lines, ['E745:', 'E1013:', 'E1210:']) let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, 0, -20) END ! call CheckLegacyAndVim9Failure(lines, 'E475:') let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, 0, 20) END ! call CheckLegacyAndVim9Failure(lines, 'E475:') let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, []) END ! call CheckLegacyAndVim9Failure(lines, ['E745:', 'E1013:', 'E1210:']) let lines =<< trim END insert(test_null_blob(), 0x33) END ! call CheckDefExecAndScriptFailure(lines, 'E1131:') let lines =<< trim END let b = 0zDEADBEEF --- 538,579 ---- VAR b = 0zDEADBEEF call insert(b, -1) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E475:') let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, 257) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E475:') let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, 0, [9]) END ! call v9.CheckLegacyAndVim9Failure(lines, ['E745:', 'E1013:', 'E1210:']) let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, 0, -20) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E475:') let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, 0, 20) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E475:') let lines =<< trim END VAR b = 0zDEADBEEF call insert(b, []) END ! call v9.CheckLegacyAndVim9Failure(lines, ['E745:', 'E1013:', 'E1210:']) let lines =<< trim END insert(test_null_blob(), 0x33) END ! call v9.CheckDefExecAndScriptFailure(lines, 'E1131:') let lines =<< trim END let b = 0zDEADBEEF *************** *** 581,587 **** call insert(b, 3) unlockvar b END ! call CheckScriptFailure(lines, 'E741:') let lines =<< trim END vim9script --- 581,587 ---- call insert(b, 3) unlockvar b END ! call v9.CheckScriptFailure(lines, 'E741:') let lines =<< trim END vim9script *************** *** 589,595 **** lockvar b insert(b, 3) END ! call CheckScriptFailure(lines, 'E741:') endfunc func Test_blob_reverse() --- 589,595 ---- lockvar b insert(b, 3) END ! call v9.CheckScriptFailure(lines, 'E741:') endfunc func Test_blob_reverse() *************** *** 600,606 **** call assert_equal(0zDE, reverse(0zDE)) call assert_equal(0z, reverse(test_null_blob())) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_blob_json_encode() --- 600,606 ---- call assert_equal(0zDE, reverse(0zDE)) call assert_equal(0z, reverse(test_null_blob())) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_blob_json_encode() *************** *** 608,614 **** call assert_equal('[222,173,190,239]', json_encode(0zDEADBEEF)) call assert_equal('[]', json_encode(0z)) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_blob_lock() --- 608,614 ---- call assert_equal('[222,173,190,239]', json_encode(0zDEADBEEF)) call assert_equal('[]', json_encode(0z)) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_blob_lock() *************** *** 618,624 **** unlockvar b let b = 0z44 END ! call CheckScriptSuccess(lines) let lines =<< trim END vim9script --- 618,624 ---- unlockvar b let b = 0z44 END ! call v9.CheckScriptSuccess(lines) let lines =<< trim END vim9script *************** *** 627,640 **** unlockvar b b = 0z44 END ! call CheckScriptSuccess(lines) let lines =<< trim END let b = 0z112233 lockvar b let b = 0z44 END ! call CheckScriptFailure(lines, 'E741:') let lines =<< trim END vim9script --- 627,640 ---- unlockvar b b = 0z44 END ! call v9.CheckScriptSuccess(lines) let lines =<< trim END let b = 0z112233 lockvar b let b = 0z44 END ! call v9.CheckScriptFailure(lines, 'E741:') let lines =<< trim END vim9script *************** *** 642,655 **** lockvar b b = 0z44 END ! call CheckScriptFailure(lines, 'E741:') endfunc func Test_blob_sort() if has('float') ! call CheckLegacyAndVim9Failure(['call sort([1.0, 0z11], "f")'], 'E975:') endif ! call CheckLegacyAndVim9Failure(['call sort([11, 0z11], "N")'], 'E974:') endfunc " Tests for the blob2list() function --- 642,655 ---- lockvar b b = 0z44 END ! call v9.CheckScriptFailure(lines, 'E741:') endfunc func Test_blob_sort() if has('float') ! call v9.CheckLegacyAndVim9Failure(['call sort([1.0, 0z11], "f")'], 'E975:') endif ! call v9.CheckLegacyAndVim9Failure(['call sort([11, 0z11], "N")'], 'E974:') endfunc " Tests for the blob2list() function *** ../vim-8.2.4256/src/testdir/test_execute_func.vim 2022-01-07 14:07:58.811008543 +0000 --- src/testdir/test_execute_func.vim 2022-01-29 20:28:08.601860858 +0000 *************** *** 2,8 **** source view_util.vim source check.vim ! source vim9.vim source term_util.vim func NestedEval() --- 2,8 ---- source view_util.vim source check.vim ! import './vim9.vim' as v9 source term_util.vim func NestedEval() *************** *** 41,47 **** if has('float') call assert_fails('call execute(3.4)', 'E492:') call assert_equal("\nx", execute("echo \"x\"", 3.4)) ! call CheckDefExecAndScriptFailure(['execute("echo \"x\"", 3.4)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1174:']) endif endfunc --- 41,47 ---- if has('float') call assert_fails('call execute(3.4)', 'E492:') call assert_equal("\nx", execute("echo \"x\"", 3.4)) ! call v9.CheckDefExecAndScriptFailure(['execute("echo \"x\"", 3.4)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1174:']) endif endfunc *** ../vim-8.2.4256/src/testdir/test_debugger.vim 2022-01-06 21:31:14.559316425 +0000 --- src/testdir/test_debugger.vim 2022-01-29 21:42:18.360884714 +0000 *************** *** 360,375 **** writefile(lines, 'Xtest.vim') # Start Vim in a terminal ! var buf = RunVimInTerminal('-S Xtest.vim', {wait_for_ruler: 0}) ! call TermWait(buf) # Despite the failure the functions are defined ! RunDbgCmd(buf, ':function g:EarlyFunc', ['function EarlyFunc()', 'endfunction'], {match: 'pattern'}) ! RunDbgCmd(buf, ':function g:LaterFunc', ['function LaterFunc()', 'endfunction'], {match: 'pattern'}) ! call StopVimInTerminal(buf) call delete('Xtest.vim') enddef --- 360,375 ---- writefile(lines, 'Xtest.vim') # Start Vim in a terminal ! var buf = g:RunVimInTerminal('-S Xtest.vim', {wait_for_ruler: 0}) ! call g:TermWait(buf) # Despite the failure the functions are defined ! g:RunDbgCmd(buf, ':function g:EarlyFunc', ['function EarlyFunc()', 'endfunction'], {match: 'pattern'}) ! g:RunDbgCmd(buf, ':function g:LaterFunc', ['function LaterFunc()', 'endfunction'], {match: 'pattern'}) ! call g:StopVimInTerminal(buf) call delete('Xtest.vim') enddef *************** *** 386,398 **** writefile(lines, 'Xtest.vim') # Start Vim in a terminal ! var buf = RunVimInTerminal('-S Xtest.vim', {wait_for_ruler: 0}) ! call TermWait(buf) ! RunDbgCmd(buf, ':call GetNum()', ['line 1: return 1 + 2 + 3'], {match: 'pattern'}) ! call StopVimInTerminal(buf) call delete('Xtest.vim') enddef --- 386,398 ---- writefile(lines, 'Xtest.vim') # Start Vim in a terminal ! var buf = g:RunVimInTerminal('-S Xtest.vim', {wait_for_ruler: 0}) ! call g:TermWait(buf) ! g:RunDbgCmd(buf, ':call GetNum()', ['line 1: return 1 + 2 + 3'], {match: 'pattern'}) ! call g:StopVimInTerminal(buf) call delete('Xtest.vim') enddef *** ../vim-8.2.4256/src/testdir/test_expr.vim 2021-12-26 21:54:38.128433097 +0000 --- src/testdir/test_expr.vim 2022-01-29 20:29:31.056610148 +0000 *************** *** 1,7 **** " Tests for expressions. source check.vim ! source vim9.vim func Test_equal() let base = {} --- 1,7 ---- " Tests for expressions. source check.vim ! import './vim9.vim' as v9 func Test_equal() let base = {} *************** *** 51,62 **** call assert_fails('echo [1] ? "yes" : "no"', 'E745:') call assert_fails('echo {} ? "yes" : "no"', 'E728:') END ! call CheckLegacyAndVim9Success(lines) call assert_equal('no', 'x' ? 'yes' : 'no') ! call CheckDefAndScriptFailure(["'x' ? 'yes' : 'no'"], 'E1135:') call assert_equal('yes', '1x' ? 'yes' : 'no') ! call CheckDefAndScriptFailure(["'1x' ? 'yes' : 'no'"], 'E1135:') endfunc func Test_op_falsy() --- 51,62 ---- call assert_fails('echo [1] ? "yes" : "no"', 'E745:') call assert_fails('echo {} ? "yes" : "no"', 'E728:') END ! call v9.CheckLegacyAndVim9Success(lines) call assert_equal('no', 'x' ? 'yes' : 'no') ! call v9.CheckDefAndScriptFailure(["'x' ? 'yes' : 'no'"], 'E1135:') call assert_equal('yes', '1x' ? 'yes' : 'no') ! call v9.CheckDefAndScriptFailure(["'1x' ? 'yes' : 'no'"], 'E1135:') endfunc func Test_op_falsy() *************** *** 81,87 **** call assert_equal(456, 0.0 ?? 456) endif END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_dict() --- 81,87 ---- call assert_equal(456, 0.0 ?? 456) endif END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_dict() *************** *** 101,109 **** LET d[ 'b' ] = 'bbb' call assert_equal('bbb', d[ 'b' ]) END ! call CheckLegacyAndVim9Success(lines) ! call CheckLegacyAndVim9Failure(["VAR i = has_key([], 'a')"], ['E715:', 'E1013:', 'E1206:']) endfunc func Test_strgetchar() --- 101,109 ---- LET d[ 'b' ] = 'bbb' call assert_equal('bbb', d[ 'b' ]) END ! call v9.CheckLegacyAndVim9Success(lines) ! call v9.CheckLegacyAndVim9Failure(["VAR i = has_key([], 'a')"], ['E715:', 'E1013:', 'E1206:']) endfunc func Test_strgetchar() *************** *** 116,125 **** call assert_equal(-1, strgetchar('axb', 3)) call assert_equal(-1, strgetchar('', 0)) END ! call CheckLegacyAndVim9Success(lines) ! call CheckLegacyAndVim9Failure(["VAR c = strgetchar([], 1)"], ['E730:', 'E1013:', 'E1174:']) ! call CheckLegacyAndVim9Failure(["VAR c = strgetchar('axb', [])"], ['E745:', 'E1013:', 'E1210:']) endfunc func Test_strcharpart() --- 116,125 ---- call assert_equal(-1, strgetchar('axb', 3)) call assert_equal(-1, strgetchar('', 0)) END ! call v9.CheckLegacyAndVim9Success(lines) ! call v9.CheckLegacyAndVim9Failure(["VAR c = strgetchar([], 1)"], ['E730:', 'E1013:', 'E1174:']) ! call v9.CheckLegacyAndVim9Failure(["VAR c = strgetchar('axb', [])"], ['E745:', 'E1013:', 'E1210:']) endfunc func Test_strcharpart() *************** *** 138,144 **** call assert_equal('edit', "editor"[-10 : 3]) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_getreg_empty_list() --- 138,144 ---- call assert_equal('edit', "editor"[-10 : 3]) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_getreg_empty_list() *************** *** 150,158 **** call add(x, 'foo') call assert_equal(['foo'], y) END ! call CheckLegacyAndVim9Success(lines) ! call CheckLegacyAndVim9Failure(['call getreg([])'], ['E730:', 'E1013:', 'E1174:']) endfunc func Test_loop_over_null_list() --- 150,158 ---- call add(x, 'foo') call assert_equal(['foo'], y) END ! call v9.CheckLegacyAndVim9Success(lines) ! call v9.CheckLegacyAndVim9Failure(['call getreg([])'], ['E730:', 'E1013:', 'E1174:']) endfunc func Test_loop_over_null_list() *************** *** 162,180 **** call assert_report('should not get here') endfor END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_setreg_null_list() let lines =<< trim END call setreg('x', test_null_list()) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_special_char() " The failure is only visible using valgrind. ! call CheckLegacyAndVim9Failure(['echo "\'], ['E15:', 'E1004:', 'E1004:']) endfunc func Test_method_with_prefix() --- 162,180 ---- call assert_report('should not get here') endfor END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_setreg_null_list() let lines =<< trim END call setreg('x', test_null_list()) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_special_char() " The failure is only visible using valgrind. ! call v9.CheckLegacyAndVim9Failure(['echo "\'], ['E15:', 'E1004:', 'E1004:']) endfunc func Test_method_with_prefix() *************** *** 182,194 **** call assert_equal(TRUE, !range(5)->empty()) call assert_equal(FALSE, !-3) END ! call CheckLegacyAndVim9Success(lines) call assert_equal([0, 1, 2], --3->range()) ! call CheckDefAndScriptFailure(['eval --3->range()'], 'E15') call assert_equal(1, !+-+0) ! call CheckDefAndScriptFailure(['eval !+-+0'], 'E15') endfunc func Test_option_value() --- 182,194 ---- call assert_equal(TRUE, !range(5)->empty()) call assert_equal(FALSE, !-3) END ! call v9.CheckLegacyAndVim9Success(lines) call assert_equal([0, 1, 2], --3->range()) ! call v9.CheckDefAndScriptFailure(['eval --3->range()'], 'E15') call assert_equal(1, !+-+0) ! call v9.CheckDefAndScriptFailure(['eval !+-+0'], 'E15') endfunc func Test_option_value() *************** *** 214,220 **** call assert_equal("abcdefgi", &cpo) set cpo&vim END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_printf_misc() --- 214,220 ---- call assert_equal("abcdefgi", &cpo) set cpo&vim END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_printf_misc() *************** *** 407,415 **** call assert_equal('1%', printf('%d%%', 1)) call assert_notequal('', printf('%p', "abc")) END ! call CheckLegacyAndVim9Success(lines) ! call CheckLegacyAndVim9Failure(["call printf('123', 3)"], "E767:") endfunc func Test_printf_float() --- 407,415 ---- call assert_equal('1%', printf('%d%%', 1)) call assert_notequal('', printf('%p', "abc")) END ! call v9.CheckLegacyAndVim9Success(lines) ! call v9.CheckLegacyAndVim9Failure(["call printf('123', 3)"], "E767:") endfunc func Test_printf_float() *************** *** 519,539 **** call assert_equal('nan', printf('%S', 0.0 / 0.0)) call assert_equal('nan', printf('%S', -0.0 / 0.0)) END ! call CheckLegacyAndVim9Success(lines) ! call CheckLegacyAndVim9Failure(['echo printf("%f", "a")'], 'E807:') endif endfunc func Test_printf_errors() ! call CheckLegacyAndVim9Failure(['echo printf("%d", {})'], 'E728:') ! call CheckLegacyAndVim9Failure(['echo printf("%d", [])'], 'E745:') ! call CheckLegacyAndVim9Failure(['echo printf("%d", 1, 2)'], 'E767:') ! call CheckLegacyAndVim9Failure(['echo printf("%*d", 1)'], 'E766:') ! call CheckLegacyAndVim9Failure(['echo printf("%s")'], 'E766:') if has('float') ! call CheckLegacyAndVim9Failure(['echo printf("%d", 1.2)'], 'E805:') ! call CheckLegacyAndVim9Failure(['echo printf("%f")'], 'E766:') endif endfunc --- 519,539 ---- call assert_equal('nan', printf('%S', 0.0 / 0.0)) call assert_equal('nan', printf('%S', -0.0 / 0.0)) END ! call v9.CheckLegacyAndVim9Success(lines) ! call v9.CheckLegacyAndVim9Failure(['echo printf("%f", "a")'], 'E807:') endif endfunc func Test_printf_errors() ! call v9.CheckLegacyAndVim9Failure(['echo printf("%d", {})'], 'E728:') ! call v9.CheckLegacyAndVim9Failure(['echo printf("%d", [])'], 'E745:') ! call v9.CheckLegacyAndVim9Failure(['echo printf("%d", 1, 2)'], 'E767:') ! call v9.CheckLegacyAndVim9Failure(['echo printf("%*d", 1)'], 'E766:') ! call v9.CheckLegacyAndVim9Failure(['echo printf("%s")'], 'E766:') if has('float') ! call v9.CheckLegacyAndVim9Failure(['echo printf("%d", 1.2)'], 'E805:') ! call v9.CheckLegacyAndVim9Failure(['echo printf("%f")'], 'E766:') endif endfunc *************** *** 541,547 **** let lines =<< trim END call assert_equal("123456789012345", printf('%d', 123456789012345)) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_printf_spec_s() --- 541,547 ---- let lines =<< trim END call assert_equal("123456789012345", printf('%d', 123456789012345)) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_printf_spec_s() *************** *** 571,577 **** #" partial call assert_equal(string(function('printf', ['%s'])), printf('%s', function('printf', ['%s']))) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_printf_spec_b() --- 571,577 ---- #" partial call assert_equal(string(function('printf', ['%s'])), printf('%s', function('printf', ['%s']))) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_printf_spec_b() *************** *** 587,600 **** call assert_equal("11100000100100010000110000011011101111101111001", printf('%b', 123456789012345)) call assert_equal("1111111111111111111111111111111111111111111111111111111111111111", printf('%b', -1)) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_max_min_errors() ! call CheckLegacyAndVim9Failure(['call max(v:true)'], ['E712:', 'E1013:', 'E1227:']) ! call CheckLegacyAndVim9Failure(['call max(v:true)'], ['max()', 'E1013:', 'E1227:']) ! call CheckLegacyAndVim9Failure(['call min(v:true)'], ['E712:', 'E1013:', 'E1227:']) ! call CheckLegacyAndVim9Failure(['call min(v:true)'], ['min()', 'E1013:', 'E1227:']) endfunc func Test_function_with_funcref() --- 587,600 ---- call assert_equal("11100000100100010000110000011011101111101111001", printf('%b', 123456789012345)) call assert_equal("1111111111111111111111111111111111111111111111111111111111111111", printf('%b', -1)) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_max_min_errors() ! call v9.CheckLegacyAndVim9Failure(['call max(v:true)'], ['E712:', 'E1013:', 'E1227:']) ! call v9.CheckLegacyAndVim9Failure(['call max(v:true)'], ['max()', 'E1013:', 'E1227:']) ! call v9.CheckLegacyAndVim9Failure(['call min(v:true)'], ['E712:', 'E1013:', 'E1227:']) ! call v9.CheckLegacyAndVim9Failure(['call min(v:true)'], ['min()', 'E1013:', 'E1227:']) endfunc func Test_function_with_funcref() *************** *** 615,623 **** call execute('VAR Ref = ' .. name) call assert_equal(4, Ref('text')) END ! call CheckTransLegacySuccess(lines) " cannot create s: variable in :def function ! call CheckTransVim9Success(lines) endfunc func Test_funcref() --- 615,623 ---- call execute('VAR Ref = ' .. name) call assert_equal(4, Ref('text')) END ! call v9.CheckTransLegacySuccess(lines) " cannot create s: variable in :def function ! call v9.CheckTransVim9Success(lines) endfunc func Test_funcref() *************** *** 668,676 **** eval set->setmatches() call assert_equal(exp, getmatches()) END ! call CheckLegacyAndVim9Success(lines) ! call CheckLegacyAndVim9Failure(['VAR m = setmatches([], [])'], ['E745:', 'E1013:', 'E1210:']) endfunc func Test_empty_concatenate() --- 668,676 ---- eval set->setmatches() call assert_equal(exp, getmatches()) END ! call v9.CheckLegacyAndVim9Success(lines) ! call v9.CheckLegacyAndVim9Failure(['VAR m = setmatches([], [])'], ['E745:', 'E1013:', 'E1210:']) endfunc func Test_empty_concatenate() *************** *** 678,696 **** call assert_equal('b', 'a'[4 : 0] .. 'b') call assert_equal('b', 'b' .. 'a'[4 : 0]) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_broken_number() ! call CheckLegacyAndVim9Failure(['VAR X = "bad"', 'echo 1X'], 'E15:') ! call CheckLegacyAndVim9Failure(['VAR X = "bad"', 'echo 0b1X'], 'E15:') ! call CheckLegacyAndVim9Failure(['echo 0b12'], 'E15:') ! call CheckLegacyAndVim9Failure(['VAR X = "bad"', 'echo 0x1X'], 'E15:') ! call CheckLegacyAndVim9Failure(['VAR X = "bad"', 'echo 011X'], 'E15:') ! call CheckLegacyAndVim9Success(['call assert_equal(2, str2nr("2a"))']) ! call CheckLegacyAndVim9Failure(['inoremap b'], 'E474:') endfunc func Test_eval_after_if() --- 678,696 ---- call assert_equal('b', 'a'[4 : 0] .. 'b') call assert_equal('b', 'b' .. 'a'[4 : 0]) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_broken_number() ! call v9.CheckLegacyAndVim9Failure(['VAR X = "bad"', 'echo 1X'], 'E15:') ! call v9.CheckLegacyAndVim9Failure(['VAR X = "bad"', 'echo 0b1X'], 'E15:') ! call v9.CheckLegacyAndVim9Failure(['echo 0b12'], 'E15:') ! call v9.CheckLegacyAndVim9Failure(['VAR X = "bad"', 'echo 0x1X'], 'E15:') ! call v9.CheckLegacyAndVim9Failure(['VAR X = "bad"', 'echo 011X'], 'E15:') ! call v9.CheckLegacyAndVim9Success(['call assert_equal(2, str2nr("2a"))']) ! call v9.CheckLegacyAndVim9Failure(['inoremap b'], 'E474:') endfunc func Test_eval_after_if() *************** *** 783,793 **** " Test for errors in expression evaluation func Test_expr_eval_error() ! call CheckLegacyAndVim9Failure(["VAR i = 'abc' .. []"], ['E730:', 'E1105:', 'E730:']) ! call CheckLegacyAndVim9Failure(["VAR l = [] + 10"], ['E745:', 'E1051:', 'E745']) ! call CheckLegacyAndVim9Failure(["VAR v = 10 + []"], ['E745:', 'E1051:', 'E745:']) ! call CheckLegacyAndVim9Failure(["VAR v = 10 / []"], ['E745:', 'E1036:', 'E745:']) ! call CheckLegacyAndVim9Failure(["VAR v = -{}"], ['E728:', 'E1012:', 'E728:']) endfunc func Test_white_in_function_call() --- 783,793 ---- " Test for errors in expression evaluation func Test_expr_eval_error() ! call v9.CheckLegacyAndVim9Failure(["VAR i = 'abc' .. []"], ['E730:', 'E1105:', 'E730:']) ! call v9.CheckLegacyAndVim9Failure(["VAR l = [] + 10"], ['E745:', 'E1051:', 'E745']) ! call v9.CheckLegacyAndVim9Failure(["VAR v = 10 + []"], ['E745:', 'E1051:', 'E745:']) ! call v9.CheckLegacyAndVim9Failure(["VAR v = 10 / []"], ['E745:', 'E1036:', 'E745:']) ! call v9.CheckLegacyAndVim9Failure(["VAR v = -{}"], ['E728:', 'E1012:', 'E728:']) endfunc func Test_white_in_function_call() *************** *** 795,807 **** VAR text = substitute ( 'some text' , 't' , 'T' , 'g' ) call assert_equal('some TexT', text) END ! call CheckTransLegacySuccess(lines) let lines =<< trim END var text = substitute ( 'some text' , 't' , 'T' , 'g' ) call assert_equal('some TexT', text) END ! call CheckDefAndScriptFailure(lines, ['E1001:', 'E121:']) endfunc " Test for float value comparison --- 795,807 ---- VAR text = substitute ( 'some text' , 't' , 'T' , 'g' ) call assert_equal('some TexT', text) END ! call v9.CheckTransLegacySuccess(lines) let lines =<< trim END var text = substitute ( 'some text' , 't' , 'T' , 'g' ) call assert_equal('some TexT', text) END ! call v9.CheckDefAndScriptFailure(lines, ['E1001:', 'E121:']) endfunc " Test for float value comparison *************** *** 825,831 **** #" +infinity != -infinity call assert_true((1.0 / 0) != -(2.0 / 0)) END ! call CheckLegacyAndVim9Success(lines) endfunc " vim: shiftwidth=2 sts=2 expandtab --- 825,831 ---- #" +infinity != -infinity call assert_true((1.0 / 0) != -(2.0 / 0)) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.4256/src/testdir/test_filter_map.vim 2022-01-02 16:16:30.523363109 +0000 --- src/testdir/test_filter_map.vim 2022-01-29 20:30:19.963869432 +0000 *************** *** 1,6 **** " Test filter() and map() ! source vim9.vim " list with expression string func Test_filter_map_list_expr_string() --- 1,6 ---- " Test filter() and map() ! import './vim9.vim' as v9 " list with expression string func Test_filter_map_list_expr_string() *************** *** 166,172 **** call assert_equal('', filter('', "v:val == 'a'")) call assert_equal('', filter(test_null_string(), "v:val == 'a'")) END ! call CheckLegacyAndVim9Success(lines) " map() let lines =<< trim END --- 166,172 ---- call assert_equal('', filter('', "v:val == 'a'")) call assert_equal('', filter(test_null_string(), "v:val == 'a'")) END ! call v9.CheckLegacyAndVim9Success(lines) " map() let lines =<< trim END *************** *** 185,191 **** call assert_fails('echo map("abc", "10")', 'E928:') call assert_fails('echo map("abc", "a10")', 'E121:') END ! call CheckLegacyAndVim9Success(lines) " mapnew() let lines =<< trim END --- 185,191 ---- call assert_fails('echo map("abc", "10")', 'E928:') call assert_fails('echo map("abc", "a10")', 'E121:') END ! call v9.CheckLegacyAndVim9Success(lines) " mapnew() let lines =<< trim END *************** *** 202,208 **** call assert_equal('', mapnew('', "v:val == 'a'")) call assert_equal('', mapnew(test_null_string(), "v:val == 'a'")) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END #" map() and filter() --- 202,208 ---- call assert_equal('', mapnew('', "v:val == 'a'")) call assert_equal('', mapnew(test_null_string(), "v:val == 'a'")) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END #" map() and filter() *************** *** 228,234 **** call assert_equal('@ström', map('Åström', LSTART i, x LMIDDLE x =~ nr2char(0xc5) .. '\%C' ? '@' : x LEND)) call assert_equal('Åstr@m', map('Åström', LSTART i, x LMIDDLE x =~ nr2char(0xf6) .. '\%C' ? '@' : x LEND)) END ! call CheckLegacyAndVim9Success(lines) endfunc " vim: shiftwidth=2 sts=2 expandtab --- 228,234 ---- call assert_equal('@ström', map('Åström', LSTART i, x LMIDDLE x =~ nr2char(0xc5) .. '\%C' ? '@' : x LEND)) call assert_equal('Åstr@m', map('Åström', LSTART i, x LMIDDLE x =~ nr2char(0xf6) .. '\%C' ? '@' : x LEND)) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.4256/src/testdir/test_float_func.vim 2021-12-19 18:33:17.321954811 +0000 --- src/testdir/test_float_func.vim 2022-01-29 20:30:44.091504240 +0000 *************** *** 2,8 **** source check.vim CheckFeature float ! source vim9.vim func Test_abs() call assert_equal('1.23', string(abs(1.23))) --- 2,8 ---- source check.vim CheckFeature float ! import './vim9.vim' as v9 func Test_abs() call assert_equal('1.23', string(abs(1.23))) *************** *** 246,252 **** call assert_equal('123456.7', string(str2float("123'456.7'89", 1))) call assert_equal(1.2, str2float(1.2, 0)) ! call CheckDefAndScriptFailure(['str2float(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) call assert_fails("call str2float([])", 'E730:') call assert_fails("call str2float({})", 'E731:') call assert_fails("call str2float(function('string'))", 'E729:') --- 246,252 ---- call assert_equal('123456.7', string(str2float("123'456.7'89", 1))) call assert_equal(1.2, str2float(1.2, 0)) ! call v9.CheckDefAndScriptFailure(['str2float(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) call assert_fails("call str2float([])", 'E730:') call assert_fails("call str2float({})", 'E731:') call assert_fails("call str2float(function('string'))", 'E729:') *** ../vim-8.2.4256/src/testdir/test_functions.vim 2022-01-27 19:58:21.858975599 +0000 --- src/testdir/test_functions.vim 2022-01-29 20:31:42.990613578 +0000 *************** *** 4,10 **** source check.vim source term_util.vim source screendump.vim ! source vim9.vim " Must be done first, since the alternate buffer must be unset. func Test_00_bufexists() --- 4,10 ---- source check.vim source term_util.vim source screendump.vim ! import './vim9.vim' as v9 " Must be done first, since the alternate buffer must be unset. func Test_00_bufexists() *************** *** 174,180 **** if has('float') call assert_equal(3, strwidth(1.2)) ! call CheckDefAndScriptFailure(['echo strwidth(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) endif set ambiwidth& --- 174,180 ---- if has('float') call assert_equal(3, strwidth(1.2)) ! call v9.CheckDefAndScriptFailure(['echo strwidth(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) endif set ambiwidth& *************** *** 241,247 **** call assert_fails('call str2nr({->2})', 'E729:') if has('float') call assert_equal(1, str2nr(1.2)) ! call CheckDefAndScriptFailure(['echo str2nr(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) endif call assert_fails('call str2nr(10, [])', 'E745:') endfunc --- 241,247 ---- call assert_fails('call str2nr({->2})', 'E729:') if has('float') call assert_equal(1, str2nr(1.2)) ! call v9.CheckDefAndScriptFailure(['echo str2nr(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) endif call assert_fails('call str2nr(10, [])', 'E745:') endfunc *************** *** 503,509 **** call assert_fails('call simplify({})', 'E731:') if has('float') call assert_equal('1.2', simplify(1.2)) ! call CheckDefAndScriptFailure(['echo simplify(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) endif endfunc --- 503,509 ---- call assert_fails('call simplify({})', 'E731:') if has('float') call assert_equal('1.2', simplify(1.2)) ! call v9.CheckDefAndScriptFailure(['echo simplify(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) endif endfunc *************** *** 2265,2271 **** let Time = 'localtime' call Time() END ! call CheckScriptFailure(lines, 'E1085:') endfunc func Test_char2nr() --- 2265,2271 ---- let Time = 'localtime' call Time() END ! call v9.CheckScriptFailure(lines, 'E1085:') endfunc func Test_char2nr() *************** *** 2800,2806 **** vim9script var s:trim = (x) => " " .. x END ! call CheckScriptFailure(lines, 'E704:') call assert_fails('call extend(g:, #{foo: { -> "foo" }})', 'E704:') let g:bar = 123 --- 2800,2806 ---- vim9script var s:trim = (x) => " " .. x END ! call v9.CheckScriptFailure(lines, 'E704:') call assert_fails('call extend(g:, #{foo: { -> "foo" }})', 'E704:') let g:bar = 123 *** ../vim-8.2.4256/src/testdir/test_glob2regpat.vim 2021-12-19 18:33:17.321954811 +0000 --- src/testdir/test_glob2regpat.vim 2022-01-29 20:32:11.638180726 +0000 *************** *** 1,11 **** " Test glob2regpat() ! source vim9.vim func Test_glob2regpat_invalid() if has('float') call assert_equal('^1\.33$', glob2regpat(1.33)) ! call CheckDefAndScriptFailure(['echo glob2regpat(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) endif call assert_fails('call glob2regpat("}")', 'E219:') call assert_fails('call glob2regpat("{")', 'E220:') --- 1,11 ---- " Test glob2regpat() ! import './vim9.vim' as v9 func Test_glob2regpat_invalid() if has('float') call assert_equal('^1\.33$', glob2regpat(1.33)) ! call v9.CheckDefAndScriptFailure(['echo glob2regpat(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1']) endif call assert_fails('call glob2regpat("}")', 'E219:') call assert_fails('call glob2regpat("{")', 'E220:') *** ../vim-8.2.4256/src/testdir/test_highlight.vim 2022-01-02 16:16:30.523363109 +0000 --- src/testdir/test_highlight.vim 2022-01-29 20:33:22.849105519 +0000 *************** *** 4,10 **** source screendump.vim source check.vim source script_util.vim ! source vim9.vim func ClearDict(d) for k in keys(a:d) --- 4,10 ---- source screendump.vim source check.vim source script_util.vim ! import './vim9.vim' as v9 func ClearDict(d) for k in keys(a:d) *************** *** 1011,1017 **** call assert_equal([], hlget(test_null_string())) call assert_equal([], hlget("")) END ! call CheckLegacyAndVim9Success(lines) " Test for resolving highlight group links let lines =<< trim END --- 1011,1017 ---- call assert_equal([], hlget(test_null_string())) call assert_equal([], hlget("")) END ! call v9.CheckLegacyAndVim9Success(lines) " Test for resolving highlight group links let lines =<< trim END *************** *** 1042,1048 **** call assert_equal([{'id': hlgCid, 'name': 'hlgC', \ 'term': {'bold': v:true}}], hlget('hlgC', v:true)) END ! call CheckLegacyAndVim9Success(lines) call assert_fails('call hlget([])', 'E1174:') call assert_fails('call hlget("abc", "xyz")', 'E1212:') --- 1042,1048 ---- call assert_equal([{'id': hlgCid, 'name': 'hlgC', \ 'term': {'bold': v:true}}], hlget('hlgC', v:true)) END ! call v9.CheckLegacyAndVim9Success(lines) call assert_fails('call hlget([])', 'E1174:') call assert_fails('call hlget("abc", "xyz")', 'E1212:') *************** *** 1098,1104 **** call assert_equal('Search', hlget('NewHLGroup')[0].linksto) highlight clear NewHLGroup END ! call CheckLegacyAndVim9Success(lines) " Test for clearing the 'term', 'cterm' and 'gui' attributes of a highlight " group. --- 1098,1104 ---- call assert_equal('Search', hlget('NewHLGroup')[0].linksto) highlight clear NewHLGroup END ! call v9.CheckLegacyAndVim9Success(lines) " Test for clearing the 'term', 'cterm' and 'gui' attributes of a highlight " group. *************** *** 1117,1123 **** \ hlget('myhlg1')) highlight clear myhlg1 END ! call CheckLegacyAndVim9Success(lines) " Test for setting all the 'term', 'cterm' and 'gui' attributes of a " highlight group --- 1117,1123 ---- \ hlget('myhlg1')) highlight clear myhlg1 END ! call v9.CheckLegacyAndVim9Success(lines) " Test for setting all the 'term', 'cterm' and 'gui' attributes of a " highlight group *************** *** 1134,1140 **** call assert_equal([{'id': id2, 'name': 'myhlg2', 'gui': attr, \ 'term': attr, 'cterm': attr}], hlget('myhlg2')) END ! call CheckLegacyAndVim9Success(lines) " Test for clearing some of the 'term', 'cterm' and 'gui' attributes of a " highlight group --- 1134,1140 ---- call assert_equal([{'id': id2, 'name': 'myhlg2', 'gui': attr, \ 'term': attr, 'cterm': attr}], hlget('myhlg2')) END ! call v9.CheckLegacyAndVim9Success(lines) " Test for clearing some of the 'term', 'cterm' and 'gui' attributes of a " highlight group *************** *** 1150,1156 **** call assert_equal([{'id': id2, 'name': 'myhlg2', 'gui': attr, \ 'term': attr, 'cterm': attr}], hlget('myhlg2')) END ! call CheckLegacyAndVim9Success(lines) " Test for clearing the attributes and link of a highlight group let lines =<< trim END --- 1150,1156 ---- call assert_equal([{'id': id2, 'name': 'myhlg2', 'gui': attr, \ 'term': attr, 'cterm': attr}], hlget('myhlg2')) END ! call v9.CheckLegacyAndVim9Success(lines) " Test for clearing the attributes and link of a highlight group let lines =<< trim END *************** *** 1162,1168 **** \ hlget('myhlg3')) highlight clear hlg3 END ! call CheckLegacyAndVim9Success(lines) " Test for setting default attributes for a highlight group let lines =<< trim END --- 1162,1168 ---- \ hlget('myhlg3')) highlight clear hlg3 END ! call v9.CheckLegacyAndVim9Success(lines) " Test for setting default attributes for a highlight group let lines =<< trim END *************** *** 1187,1193 **** \ hlget('hlg6')) highlight clear hlg6 END ! call CheckLegacyAndVim9Success(lines) " Test for setting default links for a highlight group let lines =<< trim END --- 1187,1193 ---- \ hlget('hlg6')) highlight clear hlg6 END ! call v9.CheckLegacyAndVim9Success(lines) " Test for setting default links for a highlight group let lines =<< trim END *************** *** 1217,1223 **** \ 'linksto': 'ErrorMsg'}], hlget('hlg9dup')) highlight clear hlg9 END ! call CheckLegacyAndVim9Success(lines) " Test for force creating a link to a highlight group let lines =<< trim END --- 1217,1223 ---- \ 'linksto': 'ErrorMsg'}], hlget('hlg9dup')) highlight clear hlg9 END ! call v9.CheckLegacyAndVim9Success(lines) " Test for force creating a link to a highlight group let lines =<< trim END *************** *** 1231,1237 **** \ 'linksto': 'Search'}], hlget('hlg10')) highlight clear hlg10 END ! call CheckLegacyAndVim9Success(lines) " Test for empty values of attributes call hlset([{'name': 'hlg11', 'cterm': {}}]) --- 1231,1237 ---- \ 'linksto': 'Search'}], hlget('hlg10')) highlight clear hlg10 END ! call v9.CheckLegacyAndVim9Success(lines) " Test for empty values of attributes call hlset([{'name': 'hlg11', 'cterm': {}}]) *** ../vim-8.2.4256/src/testdir/test_iminsert.vim 2021-12-12 20:07:58.720337336 +0000 --- src/testdir/test_iminsert.vim 2022-01-29 21:16:44.761317854 +0000 *************** *** 2,8 **** source view_util.vim source check.vim ! source vim9.vim let s:imactivatefunc_called = 0 let s:imstatusfunc_called = 0 --- 2,8 ---- source view_util.vim source check.vim ! import './vim9.vim' as v9 let s:imactivatefunc_called = 0 let s:imstatusfunc_called = 0 *************** *** 165,192 **** normal! i #" Test for using a lambda function ! VAR optval = "LSTART a LMIDDLE IMactivatefunc1(a) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set imactivatefunc=" .. optval ! LET optval = "LSTART LMIDDLE IMstatusfunc1() LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set imstatusfunc=" .. optval normal! i #" Set 'imactivatefunc' and 'imstatusfunc' to a lambda expression ! LET &imactivatefunc = LSTART a LMIDDLE IMactivatefunc1(a) LEND ! LET &imstatusfunc = LSTART LMIDDLE IMstatusfunc1() LEND normal! i #" Set 'imactivatefunc' and 'imstatusfunc' to a string(lambda expression) ! LET &imactivatefunc = 'LSTART a LMIDDLE IMactivatefunc1(a) LEND' ! LET &imstatusfunc = 'LSTART LMIDDLE IMstatusfunc1() LEND' normal! i #" Set 'imactivatefunc' 'imstatusfunc' to a variable with a lambda #" expression ! VAR Lambda1 = LSTART a LMIDDLE IMactivatefunc1(a) LEND ! VAR Lambda2 = LSTART LMIDDLE IMstatusfunc1() LEND LET &imactivatefunc = Lambda1 LET &imstatusfunc = Lambda2 normal! i --- 165,192 ---- normal! i #" Test for using a lambda function ! VAR optval = "LSTART a LMIDDLE g:IMactivatefunc1(a) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set imactivatefunc=" .. optval ! LET optval = "LSTART LMIDDLE g:IMstatusfunc1() LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set imstatusfunc=" .. optval normal! i #" Set 'imactivatefunc' and 'imstatusfunc' to a lambda expression ! LET &imactivatefunc = LSTART a LMIDDLE g:IMactivatefunc1(a) LEND ! LET &imstatusfunc = LSTART LMIDDLE g:IMstatusfunc1() LEND normal! i #" Set 'imactivatefunc' and 'imstatusfunc' to a string(lambda expression) ! LET &imactivatefunc = 'LSTART a LMIDDLE g:IMactivatefunc1(a) LEND' ! LET &imstatusfunc = 'LSTART LMIDDLE g:IMstatusfunc1() LEND' normal! i #" Set 'imactivatefunc' 'imstatusfunc' to a variable with a lambda #" expression ! VAR Lambda1 = LSTART a LMIDDLE g:IMactivatefunc1(a) LEND ! VAR Lambda2 = LSTART LMIDDLE g:IMstatusfunc1() LEND LET &imactivatefunc = Lambda1 LET &imstatusfunc = Lambda2 normal! i *************** *** 223,229 **** call assert_equal(14, g:IMactivatefunc_called) call assert_equal(28, g:IMstatusfunc_called) END ! call CheckLegacyAndVim9Success(lines) " Using Vim9 lambda expression in legacy context should fail set imactivatefunc=(a)\ =>\ IMactivatefunc1(a) --- 223,229 ---- call assert_equal(14, g:IMactivatefunc_called) call assert_equal(28, g:IMstatusfunc_called) END ! call v9.CheckLegacyAndVim9Success(lines) " Using Vim9 lambda expression in legacy context should fail set imactivatefunc=(a)\ =>\ IMactivatefunc1(a) *************** *** 285,291 **** set imactivatefunc= set imstatusfunc= END ! call CheckScriptSuccess(lines) " cleanup set iminsert=0 --- 285,291 ---- set imactivatefunc= set imstatusfunc= END ! call v9.CheckScriptSuccess(lines) " cleanup set iminsert=0 *** ../vim-8.2.4256/src/testdir/test_ins_complete.vim 2022-01-08 10:38:43.954908318 +0000 --- src/testdir/test_ins_complete.vim 2022-01-29 21:19:59.702027004 +0000 *************** *** 2,8 **** source screendump.vim source check.vim ! source vim9.vim " Test for insert expansion func Test_ins_complete() --- 2,8 ---- source screendump.vim source check.vim ! import './vim9.vim' as v9 " Test for insert expansion func Test_ins_complete() *************** *** 1359,1365 **** bw! #" Test for using a lambda function with set ! VAR optval = "LSTART a, b LMIDDLE CompleteFunc1(16, a, b) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set completefunc=" .. optval new --- 1359,1365 ---- bw! #" Test for using a lambda function with set ! VAR optval = "LSTART a, b LMIDDLE g:CompleteFunc1(16, a, b) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set completefunc=" .. optval new *************** *** 1370,1376 **** bw! #" Set 'completefunc' to a lambda expression ! LET &completefunc = LSTART a, b LMIDDLE CompleteFunc1(17, a, b) LEND new call setline(1, 'six') LET g:CompleteFunc1Args = [] --- 1370,1376 ---- bw! #" Set 'completefunc' to a lambda expression ! LET &completefunc = LSTART a, b LMIDDLE g:CompleteFunc1(17, a, b) LEND new call setline(1, 'six') LET g:CompleteFunc1Args = [] *************** *** 1379,1385 **** bw! #" Set 'completefunc' to string(lambda_expression) ! LET &completefunc = 'LSTART a, b LMIDDLE CompleteFunc1(18, a, b) LEND' new call setline(1, 'six') LET g:CompleteFunc1Args = [] --- 1379,1385 ---- bw! #" Set 'completefunc' to string(lambda_expression) ! LET &completefunc = 'LSTART a, b LMIDDLE g:CompleteFunc1(18, a, b) LEND' new call setline(1, 'six') LET g:CompleteFunc1Args = [] *************** *** 1388,1394 **** bw! #" Set 'completefunc' to a variable with a lambda expression ! VAR Lambda = LSTART a, b LMIDDLE CompleteFunc1(19, a, b) LEND LET &completefunc = Lambda new call setline(1, 'seven') --- 1388,1394 ---- bw! #" Set 'completefunc' to a variable with a lambda expression ! VAR Lambda = LSTART a, b LMIDDLE g:CompleteFunc1(19, a, b) LEND LET &completefunc = Lambda new call setline(1, 'seven') *************** *** 1398,1404 **** bw! #" Set 'completefunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a, b LMIDDLE CompleteFunc1(20, a, b) LEND LET &completefunc = string(Lambda) new call setline(1, 'seven') --- 1398,1404 ---- bw! #" Set 'completefunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a, b LMIDDLE g:CompleteFunc1(20, a, b) LEND LET &completefunc = string(Lambda) new call setline(1, 'seven') *************** *** 1431,1437 **** call assert_equal([[1, ''], [0, 'five']], g:CompleteFunc2Args) bw! END ! call CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:CompleteFunc3(findstart, base) --- 1431,1437 ---- call assert_equal([[1, ''], [0, 'five']], g:CompleteFunc2Args) bw! END ! call v9.CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:CompleteFunc3(findstart, base) *************** *** 1460,1466 **** call feedkeys("A\\\", 'x') " Using Vim9 lambda expression in legacy context should fail ! set completefunc=(a,\ b)\ =>\ CompleteFunc1(21,\ a,\ b) new | only let g:CompleteFunc1Args = [] call assert_fails('call feedkeys("A\\\", "x")', 'E117:') --- 1460,1466 ---- call feedkeys("A\\\", 'x') " Using Vim9 lambda expression in legacy context should fail ! set completefunc=(a,\ b)\ =>\ g:CompleteFunc1(21,\ a,\ b) new | only let g:CompleteFunc1Args = [] call assert_fails('call feedkeys("A\\\", "x")', 'E117:') *************** *** 1526,1532 **** assert_equal([[1, ''], [0, 'three']], g:LocalCompleteFuncArgs) bw! END ! call CheckScriptSuccess(lines) " cleanup set completefunc& --- 1526,1532 ---- assert_equal([[1, ''], [0, 'three']], g:LocalCompleteFuncArgs) bw! END ! call v9.CheckScriptSuccess(lines) " cleanup set completefunc& *************** *** 1616,1622 **** bw! #" Test for using a lambda function with set ! VAR optval = "LSTART a, b LMIDDLE OmniFunc1(16, a, b) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set omnifunc=" .. optval new --- 1616,1622 ---- bw! #" Test for using a lambda function with set ! VAR optval = "LSTART a, b LMIDDLE g:OmniFunc1(16, a, b) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set omnifunc=" .. optval new *************** *** 1627,1633 **** bw! #" Set 'omnifunc' to a lambda expression ! LET &omnifunc = LSTART a, b LMIDDLE OmniFunc1(17, a, b) LEND new call setline(1, 'six') LET g:OmniFunc1Args = [] --- 1627,1633 ---- bw! #" Set 'omnifunc' to a lambda expression ! LET &omnifunc = LSTART a, b LMIDDLE g:OmniFunc1(17, a, b) LEND new call setline(1, 'six') LET g:OmniFunc1Args = [] *************** *** 1636,1642 **** bw! #" Set 'omnifunc' to a string(lambda_expression) ! LET &omnifunc = 'LSTART a, b LMIDDLE OmniFunc1(18, a, b) LEND' new call setline(1, 'six') LET g:OmniFunc1Args = [] --- 1636,1642 ---- bw! #" Set 'omnifunc' to a string(lambda_expression) ! LET &omnifunc = 'LSTART a, b LMIDDLE g:OmniFunc1(18, a, b) LEND' new call setline(1, 'six') LET g:OmniFunc1Args = [] *************** *** 1645,1651 **** bw! #" Set 'omnifunc' to a variable with a lambda expression ! VAR Lambda = LSTART a, b LMIDDLE OmniFunc1(19, a, b) LEND LET &omnifunc = Lambda new call setline(1, 'seven') --- 1645,1651 ---- bw! #" Set 'omnifunc' to a variable with a lambda expression ! VAR Lambda = LSTART a, b LMIDDLE g:OmniFunc1(19, a, b) LEND LET &omnifunc = Lambda new call setline(1, 'seven') *************** *** 1655,1661 **** bw! #" Set 'omnifunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a, b LMIDDLE OmniFunc1(20, a, b) LEND LET &omnifunc = string(Lambda) new call setline(1, 'seven') --- 1655,1661 ---- bw! #" Set 'omnifunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a, b LMIDDLE g:OmniFunc1(20, a, b) LEND LET &omnifunc = string(Lambda) new call setline(1, 'seven') *************** *** 1688,1694 **** call assert_equal([[1, ''], [0, 'nine']], g:OmniFunc2Args) bw! END ! call CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:OmniFunc3(findstart, base) --- 1688,1694 ---- call assert_equal([[1, ''], [0, 'nine']], g:OmniFunc2Args) bw! END ! call v9.CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:OmniFunc3(findstart, base) *************** *** 1783,1789 **** assert_equal([[1, ''], [0, 'three']], g:LocalOmniFuncArgs) bw! END ! call CheckScriptSuccess(lines) " cleanup set omnifunc& --- 1783,1789 ---- assert_equal([[1, ''], [0, 'three']], g:LocalOmniFuncArgs) bw! END ! call v9.CheckScriptSuccess(lines) " cleanup set omnifunc& *************** *** 1873,1879 **** bw! #" Test for using a lambda function ! VAR optval = "LSTART a, b LMIDDLE TsrFunc1(16, a, b) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set thesaurusfunc=" .. optval new --- 1873,1879 ---- bw! #" Test for using a lambda function ! VAR optval = "LSTART a, b LMIDDLE g:TsrFunc1(16, a, b) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set thesaurusfunc=" .. optval new *************** *** 1884,1890 **** bw! #" Test for using a lambda function with set ! LET &thesaurusfunc = LSTART a, b LMIDDLE TsrFunc1(17, a, b) LEND new call setline(1, 'six') LET g:TsrFunc1Args = [] --- 1884,1890 ---- bw! #" Test for using a lambda function with set ! LET &thesaurusfunc = LSTART a, b LMIDDLE g:TsrFunc1(17, a, b) LEND new call setline(1, 'six') LET g:TsrFunc1Args = [] *************** *** 1893,1899 **** bw! #" Set 'thesaurusfunc' to a string(lambda expression) ! LET &thesaurusfunc = 'LSTART a, b LMIDDLE TsrFunc1(18, a, b) LEND' new call setline(1, 'six') LET g:TsrFunc1Args = [] --- 1893,1899 ---- bw! #" Set 'thesaurusfunc' to a string(lambda expression) ! LET &thesaurusfunc = 'LSTART a, b LMIDDLE g:TsrFunc1(18, a, b) LEND' new call setline(1, 'six') LET g:TsrFunc1Args = [] *************** *** 1902,1908 **** bw! #" Set 'thesaurusfunc' to a variable with a lambda expression ! VAR Lambda = LSTART a, b LMIDDLE TsrFunc1(19, a, b) LEND LET &thesaurusfunc = Lambda new call setline(1, 'seven') --- 1902,1908 ---- bw! #" Set 'thesaurusfunc' to a variable with a lambda expression ! VAR Lambda = LSTART a, b LMIDDLE g:TsrFunc1(19, a, b) LEND LET &thesaurusfunc = Lambda new call setline(1, 'seven') *************** *** 1912,1918 **** bw! #" Set 'thesaurusfunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a, b LMIDDLE TsrFunc1(20, a, b) LEND LET &thesaurusfunc = string(Lambda) new call setline(1, 'seven') --- 1912,1918 ---- bw! #" Set 'thesaurusfunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a, b LMIDDLE g:TsrFunc1(20, a, b) LEND LET &thesaurusfunc = string(Lambda) new call setline(1, 'seven') *************** *** 1968,1974 **** call assert_equal([[22, 1, ''], [22, 0, 'sun']], g:TsrFunc1Args) :%bw! END ! call CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:TsrFunc3(findstart, base) --- 1968,1974 ---- call assert_equal([[22, 1, ''], [22, 0, 'sun']], g:TsrFunc1Args) :%bw! END ! call v9.CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:TsrFunc3(findstart, base) *************** *** 2076,2082 **** assert_equal([[1, ''], [0, 'three']], g:LocalTsrFuncArgs) bw! END ! call CheckScriptSuccess(lines) " cleanup set thesaurusfunc& --- 2076,2082 ---- assert_equal([[1, ''], [0, 'three']], g:LocalTsrFuncArgs) bw! END ! call v9.CheckScriptSuccess(lines) " cleanup set thesaurusfunc& *** ../vim-8.2.4256/src/testdir/test_listdict.vim 2021-12-26 21:54:38.128433097 +0000 --- src/testdir/test_listdict.vim 2022-01-29 21:23:39.946421200 +0000 *************** *** 1,7 **** " Tests for the List and Dict types scriptencoding utf-8 ! source vim9.vim func TearDown() " Run garbage collection after every test --- 1,7 ---- " Tests for the List and Dict types scriptencoding utf-8 ! import './vim9.vim' as v9 func TearDown() " Run garbage collection after every test *************** *** 50,56 **** call assert_equal([2], l[-1 : -1]) call assert_equal([1, 2], l[-2 : -1]) END ! call CheckLegacyAndVim9Success(lines) let l = [1, 2] call assert_equal([], l[-3 : -1]) --- 50,56 ---- call assert_equal([2], l[-1 : -1]) call assert_equal([1, 2], l[-2 : -1]) END ! call v9.CheckLegacyAndVim9Success(lines) let l = [1, 2] call assert_equal([], l[-3 : -1]) *************** *** 59,65 **** var l = [1, 2] assert_equal([1, 2], l[-3 : -1]) END ! call CheckDefAndScriptSuccess(lines) endfunc " List identity --- 59,65 ---- var l = [1, 2] assert_equal([1, 2], l[-3 : -1]) END ! call v9.CheckDefAndScriptSuccess(lines) endfunc " List identity *************** *** 75,81 **** call assert_false(l is lx) call assert_true(l isnot lx) END ! call CheckLegacyAndVim9Success(lines) endfunc " removing items with :unlet --- 75,81 ---- call assert_false(l is lx) call assert_true(l isnot lx) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " removing items with :unlet *************** *** 118,124 **** unlet l[-6 : 2] call assert_equal([3], l) END ! call CheckLegacyAndVim9Success(lines) let l = [0, 1, 2, 3] unlet l[2:2] --- 118,124 ---- unlet l[-6 : 2] call assert_equal([3], l) END ! call v9.CheckLegacyAndVim9Success(lines) let l = [0, 1, 2, 3] unlet l[2:2] *************** *** 131,143 **** VAR l = [0, 1, 2, 3] unlet l[2 : 1] END ! call CheckLegacyAndVim9Failure(lines, 'E684:') let lines =<< trim END VAR l = [0, 1, 2, 3] unlet l[-1 : 2] END ! call CheckLegacyAndVim9Failure(lines, 'E684:') endfunc " assignment to a list --- 131,143 ---- VAR l = [0, 1, 2, 3] unlet l[2 : 1] END ! call v9.CheckLegacyAndVim9Failure(lines, 'E684:') let lines =<< trim END VAR l = [0, 1, 2, 3] unlet l[-1 : 2] END ! call v9.CheckLegacyAndVim9Failure(lines, 'E684:') endfunc " assignment to a list *************** *** 149,183 **** LET [va, vb] = l[2 : 3] call assert_equal([2, 3], [va, vb]) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END let l = [0, 1, 2, 3] let [va, vb] = l END ! call CheckScriptFailure(lines, 'E687:') let lines =<< trim END var l = [0, 1, 2, 3] var va = 0 var vb = 0 [va, vb] = l END ! call CheckScriptFailure(['vim9script'] + lines, 'E687:') ! call CheckDefExecFailure(lines, 'E1093: Expected 2 items but got 4') let lines =<< trim END let l = [0, 1, 2, 3] let [va, vb] = l[1:1] END ! call CheckScriptFailure(lines, 'E688:') let lines =<< trim END var l = [0, 1, 2, 3] var va = 0 var vb = 0 [va, vb] = l[1 : 1] END ! call CheckScriptFailure(['vim9script'] + lines, 'E688:') ! call CheckDefExecFailure(lines, 'E1093: Expected 2 items but got 1') endfunc " test for range assign --- 149,183 ---- LET [va, vb] = l[2 : 3] call assert_equal([2, 3], [va, vb]) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END let l = [0, 1, 2, 3] let [va, vb] = l END ! call v9.CheckScriptFailure(lines, 'E687:') let lines =<< trim END var l = [0, 1, 2, 3] var va = 0 var vb = 0 [va, vb] = l END ! call v9.CheckScriptFailure(['vim9script'] + lines, 'E687:') ! call v9.CheckDefExecFailure(lines, 'E1093: Expected 2 items but got 4') let lines =<< trim END let l = [0, 1, 2, 3] let [va, vb] = l[1:1] END ! call v9.CheckScriptFailure(lines, 'E688:') let lines =<< trim END var l = [0, 1, 2, 3] var va = 0 var vb = 0 [va, vb] = l[1 : 1] END ! call v9.CheckScriptFailure(['vim9script'] + lines, 'E688:') ! call v9.CheckDefExecFailure(lines, 'E1093: Expected 2 items but got 1') endfunc " test for range assign *************** *** 189,201 **** LET l[-4 : -1] = [5, 6] call assert_equal([5, 6], l) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END var l = [7] l[:] = ['text'] END ! call CheckDefAndScriptFailure(lines, 'E1012:', 2) endfunc " Test removing items in list --- 189,201 ---- LET l[-4 : -1] = [5, 6] call assert_equal([5, 6], l) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END var l = [7] l[:] = ['text'] END ! call v9.CheckDefAndScriptFailure(lines, 'E1012:', 2) endfunc " Test removing items in list *************** *** 227,233 **** call assert_equal([2, 3], remove(l, -3, -2)) call assert_equal([1, 4], l) END ! call CheckLegacyAndVim9Success(lines) " Test invalid cases let l = [1, 2, 3, 4] --- 227,233 ---- call assert_equal([2, 3], remove(l, -3, -2)) call assert_equal([1, 4], l) END ! call v9.CheckLegacyAndVim9Success(lines) " Test invalid cases let l = [1, 2, 3, 4] *************** *** 251,257 **** call add(l, test_null_dict()) call assert_equal([1, [2, 3], [], [], {'k': 3}, {}, {}], l) END ! call CheckLegacyAndVim9Success(lines) " weird legacy behavior call assert_equal(1, add(test_null_list(), 4)) --- 251,257 ---- call add(l, test_null_dict()) call assert_equal([1, [2, 3], [], [], {'k': 3}, {}, {}], l) END ! call v9.CheckLegacyAndVim9Success(lines) " weird legacy behavior call assert_equal(1, add(test_null_list(), 4)) *************** *** 271,277 **** call extend(d, {'b': 'bbb', 'c': 'ccc'}, "keep") call assert_equal({'c': 'ccc', '1': 99, 'b': [1, 2, function('strlen')], '3': 33, '-1': {'a': 1}}, d) END ! call CheckLegacyAndVim9Success(lines) let d = {001: 'asd', 'b': [1, 2, function('strlen')], -1: {'a': 1},} call assert_equal("{'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}}", string(d)) --- 271,277 ---- call extend(d, {'b': 'bbb', 'c': 'ccc'}, "keep") call assert_equal({'c': 'ccc', '1': 99, 'b': [1, 2, function('strlen')], '3': 33, '-1': {'a': 1}}, d) END ! call v9.CheckLegacyAndVim9Success(lines) let d = {001: 'asd', 'b': [1, 2, function('strlen')], -1: {'a': 1},} call assert_equal("{'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}}", string(d)) *************** *** 320,326 **** call assert_false(d is dx) call assert_true(d isnot dx) END ! call CheckLegacyAndVim9Success(lines) endfunc " removing items with :unlet --- 320,326 ---- call assert_false(d is dx) call assert_true(d isnot dx) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " removing items with :unlet *************** *** 331,337 **** unlet d[-1] call assert_equal({'1': 99, '3': 33}, d) END ! call CheckLegacyAndVim9Success(lines) endfunc " manipulating a big Dictionary (hashtable.c has a border of 1000 entries) --- 331,337 ---- unlet d[-1] call assert_equal({'1': 99, '3': 33}, d) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " manipulating a big Dictionary (hashtable.c has a border of 1000 entries) *************** *** 405,428 **** LET d._ = 2 call assert_equal({'a': 1, '_': 2}, d) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END let n = 0 let n.key = 3 END ! call CheckScriptFailure(lines, 'E1203: Dot can only be used on a dictionary: n.key = 3') let lines =<< trim END vim9script var n = 0 n.key = 3 END ! call CheckScriptFailure(lines, 'E1203: Dot can only be used on a dictionary: n.key = 3') let lines =<< trim END var n = 0 n.key = 3 END ! call CheckDefFailure(lines, 'E1141:') endfunc " Function in script-local List or Dict --- 405,428 ---- LET d._ = 2 call assert_equal({'a': 1, '_': 2}, d) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END let n = 0 let n.key = 3 END ! call v9.CheckScriptFailure(lines, 'E1203: Dot can only be used on a dictionary: n.key = 3') let lines =<< trim END vim9script var n = 0 n.key = 3 END ! call v9.CheckScriptFailure(lines, 'E1203: Dot can only be used on a dictionary: n.key = 3') let lines =<< trim END var n = 0 n.key = 3 END ! call v9.CheckDefFailure(lines, 'E1141:') endfunc " Function in script-local List or Dict *************** *** 444,498 **** call assert_equal('b', remove(d, 2)) call assert_equal({1: 'a', 3: 'c'}, d) END ! call CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR d = {1: 'a', 3: 'c'} call remove(d, 1, 2) END ! call CheckLegacyAndVim9Failure(lines, 'E118:') let lines =<< trim END VAR d = {1: 'a', 3: 'c'} call remove(d, 'a') END ! call CheckLegacyAndVim9Failure(lines, 'E716:') let lines =<< trim END let d = {'a-b': 55} echo d.a-b END ! call CheckScriptFailure(lines, 'E716: Key not present in Dictionary: "a"') let lines =<< trim END vim9script var d = {'a-b': 55} echo d.a-b END ! call CheckScriptFailure(lines, 'E716: Key not present in Dictionary: "a"') let lines =<< trim END var d = {'a-b': 55} echo d.a-b END ! call CheckDefFailure(lines, 'E1004: White space required before and after ''-''') let lines =<< trim END let d = {1: 'a', 3: 'c'} call remove(d, []) END ! call CheckScriptFailure(lines, 'E730:') let lines =<< trim END vim9script var d = {1: 'a', 3: 'c'} call remove(d, []) END ! call CheckScriptFailure(lines, 'E1220: String or Number required for argument 2') let lines =<< trim END var d = {1: 'a', 3: 'c'} call remove(d, []) END ! call CheckDefExecFailure(lines, 'E1013: Argument 2: type mismatch, expected string but got list') endfunc " Nasty: remove func from Dict that's being called (works) --- 444,498 ---- call assert_equal('b', remove(d, 2)) call assert_equal({1: 'a', 3: 'c'}, d) END ! call v9.CheckLegacyAndVim9Success(lines) let lines =<< trim END VAR d = {1: 'a', 3: 'c'} call remove(d, 1, 2) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E118:') let lines =<< trim END VAR d = {1: 'a', 3: 'c'} call remove(d, 'a') END ! call v9.CheckLegacyAndVim9Failure(lines, 'E716:') let lines =<< trim END let d = {'a-b': 55} echo d.a-b END ! call v9.CheckScriptFailure(lines, 'E716: Key not present in Dictionary: "a"') let lines =<< trim END vim9script var d = {'a-b': 55} echo d.a-b END ! call v9.CheckScriptFailure(lines, 'E716: Key not present in Dictionary: "a"') let lines =<< trim END var d = {'a-b': 55} echo d.a-b END ! call v9.CheckDefFailure(lines, 'E1004: White space required before and after ''-''') let lines =<< trim END let d = {1: 'a', 3: 'c'} call remove(d, []) END ! call v9.CheckScriptFailure(lines, 'E730:') let lines =<< trim END vim9script var d = {1: 'a', 3: 'c'} call remove(d, []) END ! call v9.CheckScriptFailure(lines, 'E1220: String or Number required for argument 2') let lines =<< trim END var d = {1: 'a', 3: 'c'} call remove(d, []) END ! call v9.CheckDefExecFailure(lines, 'E1013: Argument 2: type mismatch, expected string but got list') endfunc " Nasty: remove func from Dict that's being called (works) *************** *** 514,521 **** VAR expected = 'a:' .. string(get(d, 'func')) call assert_equal(expected, d.func(string(remove(d, 'func')))) END ! call CheckTransLegacySuccess(lines) ! call CheckTransVim9Success(lines) endfunc func Test_dict_literal_keys() --- 514,521 ---- VAR expected = 'a:' .. string(get(d, 'func')) call assert_equal(expected, d.func(string(remove(d, 'func')))) END ! call v9.CheckTransLegacySuccess(lines) ! call v9.CheckTransVim9Success(lines) endfunc func Test_dict_literal_keys() *************** *** 535,541 **** VAR dc = deepcopy(d) call deepcopy(d, 1) END ! call CheckLegacyAndVim9Failure(lines, 'E698:') let lines =<< trim END VAR d = {1: 1, 2: '2'} --- 535,541 ---- VAR dc = deepcopy(d) call deepcopy(d, 1) END ! call v9.CheckLegacyAndVim9Failure(lines, 'E698:') let lines =<< trim END VAR d = {1: 1, 2: '2'} *************** *** 546,552 **** VAR l3 = deepcopy(l2) call assert_true(l3[1] is l3[2]) END ! call CheckLegacyAndVim9Success(lines) call assert_fails("call deepcopy([1, 2], 2)", 'E1023:') endfunc --- 546,552 ---- VAR l3 = deepcopy(l2) call assert_true(l3[1] is l3[2]) END ! call v9.CheckLegacyAndVim9Success(lines) call assert_fails("call deepcopy([1, 2], 2)", 'E1023:') endfunc *************** *** 631,638 **** endfor endfor END ! call CheckTransLegacySuccess(lines) ! call CheckTransVim9Success(lines) call assert_fails("let x=islocked('a b')", 'E488:') let mylist = [1, 2, 3] --- 631,638 ---- endfor endfor END ! call v9.CheckTransLegacySuccess(lines) ! call v9.CheckTransVim9Success(lines) call assert_fails("let x=islocked('a b')", 'E488:') let mylist = [1, 2, 3] *************** *** 745,751 **** unlet d.a call assert_equal({'b': 100}, d) END ! call CheckLegacyAndVim9Success(lines) endfunc " filter() after lock on dict item --- 745,751 ---- unlet d.a call assert_equal({'b': 100}, d) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " filter() after lock on dict item *************** *** 756,762 **** call filter(d, 'v:key != "a"') call assert_equal({'b': 100}, d) END ! call CheckLegacyAndVim9Success(lines) endfunc " map() after lock on dict --- 756,762 ---- call filter(d, 'v:key != "a"') call assert_equal({'b': 100}, d) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " map() after lock on dict *************** *** 768,775 **** call assert_equal({'a': 299, 'b': 300}, d) END " This won't work in a :def function ! call CheckTransLegacySuccess(lines) ! call CheckTransVim9Success(lines) " For a :def function use a global dict. let lines =<< trim END --- 768,775 ---- call assert_equal({'a': 299, 'b': 300}, d) END " This won't work in a :def function ! call v9.CheckTransLegacySuccess(lines) ! call v9.CheckTransVim9Success(lines) " For a :def function use a global dict. let lines =<< trim END *************** *** 780,786 **** enddef call Delkey() END ! call CheckScriptFailure(lines, 'E741:') endfunc " Lock one item in a list --- 780,786 ---- enddef call Delkey() END ! call v9.CheckScriptFailure(lines, 'E741:') endfunc " Lock one item in a list *************** *** 792,799 **** call assert_equal([299, 100, 101], l) END " This won't work in a :def function ! call CheckTransLegacySuccess(lines) ! call CheckTransVim9Success(lines) endfunc " Lock one item in a dict --- 792,799 ---- call assert_equal([299, 100, 101], l) END " This won't work in a :def function ! call v9.CheckTransLegacySuccess(lines) ! call v9.CheckTransVim9Success(lines) endfunc " Lock one item in a dict *************** *** 805,812 **** call assert_equal({'a': 299, 'b': 100, 'c': 101}, d) END " This won't work in a :def function ! call CheckTransLegacySuccess(lines) ! call CheckTransVim9Success(lines) endfunc " No extend() after lock on dict item --- 805,812 ---- call assert_equal({'a': 299, 'b': 100, 'c': 101}, d) END " This won't work in a :def function ! call v9.CheckTransLegacySuccess(lines) ! call v9.CheckTransVim9Success(lines) endfunc " No extend() after lock on dict item *************** *** 885,891 **** lockvar! l call TryUnletListItem(l) END ! call CheckScriptFailure(lines, 'E741:') unlet g:l endfunc --- 885,891 ---- lockvar! l call TryUnletListItem(l) END ! call v9.CheckScriptFailure(lines, 'E741:') unlet g:l endfunc *************** *** 954,960 **** call assert_equal(['BAR', 'Bar', 'FOO', 'FOOBAR', 'Foo', 'bar', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}], sort(copy(l))) endif END ! call CheckLegacyAndVim9Success(lines) call assert_fails('call reverse("")', 'E899:') call assert_fails('call uniq([1, 2], {x, y -> []})', 'E745:') --- 954,960 ---- call assert_equal(['BAR', 'Bar', 'FOO', 'FOOBAR', 'Foo', 'bar', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}], sort(copy(l))) endif END ! call v9.CheckLegacyAndVim9Success(lines) call assert_fails('call reverse("")', 'E899:') call assert_fails('call uniq([1, 2], {x, y -> []})', 'E745:') *************** *** 997,1003 **** call assert_equal('Å,s,t,r,ö,m', reduce('Åström', LSTART acc, val LMIDDLE acc .. ',' .. val LEND)) call assert_equal(',a,b,c', reduce('abc', LSTART acc, val LMIDDLE acc .. ',' .. val LEND, test_null_string())) END ! call CheckLegacyAndVim9Success(lines) call assert_equal({'x': 1, 'y': 1, 'z': 1 }, ['x', 'y', 'z']->reduce({ acc, val -> extend(acc, { val: 1 }) }, {})) vim9 assert_equal({'x': 1, 'y': 1, 'z': 1 }, ['x', 'y', 'z']->reduce((acc, val) => extend(acc, {[val]: 1 }), {})) --- 997,1003 ---- call assert_equal('Å,s,t,r,ö,m', reduce('Åström', LSTART acc, val LMIDDLE acc .. ',' .. val LEND)) call assert_equal(',a,b,c', reduce('abc', LSTART acc, val LMIDDLE acc .. ',' .. val LEND, test_null_string())) END ! call v9.CheckLegacyAndVim9Success(lines) call assert_equal({'x': 1, 'y': 1, 'z': 1 }, ['x', 'y', 'z']->reduce({ acc, val -> extend(acc, { val: 1 }) }, {})) vim9 assert_equal({'x': 1, 'y': 1, 'z': 1 }, ['x', 'y', 'z']->reduce((acc, val) => extend(acc, {[val]: 1 }), {})) *************** *** 1055,1061 **** call assert_equal(['', 'a', '', 'b', '', 'c', ''], split('abc', '\zs', 1)) call assert_equal(['abc'], split('abc', '\\%(')) END ! call CheckLegacyAndVim9Success(lines) call assert_fails("call split('abc', [])", 'E730:') call assert_fails("call split('abc', 'b', [])", 'E745:') --- 1055,1061 ---- call assert_equal(['', 'a', '', 'b', '', 'c', ''], split('abc', '\zs', 1)) call assert_equal(['abc'], split('abc', '\\%(')) END ! call v9.CheckLegacyAndVim9Success(lines) call assert_fails("call split('abc', [])", 'E730:') call assert_fails("call split('abc', 'b', [])", 'E745:') *************** *** 1072,1078 **** call assert_false(l != deepcopy(l)) call assert_false(d != deepcopy(d)) END ! call CheckLegacyAndVim9Success(lines) " comparison errors call assert_fails('echo [1, 2] =~ {}', 'E691:') --- 1072,1078 ---- call assert_false(l != deepcopy(l)) call assert_false(d != deepcopy(d)) END ! call v9.CheckLegacyAndVim9Success(lines) " comparison errors call assert_fails('echo [1, 2] =~ {}', 'E691:') *************** *** 1093,1099 **** call assert_true(l == lcopy) call assert_true(dict4 == dict4copy) END ! call CheckLegacyAndVim9Success(lines) endfunc " Test for extending lists and dictionaries --- 1093,1099 ---- call assert_true(l == lcopy) call assert_true(dict4 == dict4copy) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " Test for extending lists and dictionaries *************** *** 1130,1136 **** call extend(l, [4, 5, 6], -3) call assert_equal([4, 5, 6, 1, 2, 3], l) END ! call CheckLegacyAndVim9Success(lines) let l = [1, 2, 3] call assert_fails("call extend(l, [4, 5, 6], 4)", 'E684:') --- 1130,1136 ---- call extend(l, [4, 5, 6], -3) call assert_equal([4, 5, 6, 1, 2, 3], l) END ! call v9.CheckLegacyAndVim9Success(lines) let l = [1, 2, 3] call assert_fails("call extend(l, [4, 5, 6], 4)", 'E684:') *************** *** 1159,1165 **** call extend(d, {'b': 0, 'c': 'C'}, "keep") call assert_equal({'a': 'A', 'b': 9, 'c': 'C'}, d) END ! call CheckLegacyAndVim9Success(lines) let d = {'a': 'A', 'b': 'B'} call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'error')", 'E737:') --- 1159,1165 ---- call extend(d, {'b': 0, 'c': 'C'}, "keep") call assert_equal({'a': 'A', 'b': 9, 'c': 'C'}, d) END ! call v9.CheckLegacyAndVim9Success(lines) let d = {'a': 'A', 'b': 'B'} call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'error')", 'E737:') *************** *** 1191,1197 **** call extend(l, l, 3) call assert_equal([1, 5, 7, 1, 5, 7], l) END ! call CheckLegacyAndVim9Success(lines) endfunc func Test_listdict_extendnew() --- 1191,1197 ---- call extend(l, l, 3) call assert_equal([1, 5, 7, 1, 5, 7], l) END ! call v9.CheckLegacyAndVim9Success(lines) endfunc func Test_listdict_extendnew() *************** *** 1318,1347 **** " List and dict indexing tests func Test_listdict_index() ! call CheckLegacyAndVim9Failure(['echo function("min")[0]'], 'E695:') ! call CheckLegacyAndVim9Failure(['echo v:true[0]'], 'E909:') ! call CheckLegacyAndVim9Failure(['echo v:null[0]'], 'E909:') ! call CheckLegacyAndVim9Failure(['VAR d = {"k": 10}', 'echo d.'], ['E15:', 'E1127:', 'E15:']) ! call CheckLegacyAndVim9Failure(['VAR d = {"k": 10}', 'echo d[1 : 2]'], 'E719:') call assert_fails("let v = [4, 6][{-> 1}]", 'E729:') ! call CheckDefAndScriptFailure(['var v = [4, 6][() => 1]'], ['E1012', 'E703:']) ! call CheckLegacyAndVim9Failure(['VAR v = range(5)[2 : []]'], ['E730:', 'E1012:', 'E730:']) call assert_fails("let v = range(5)[2:{-> 2}(]", ['E15:', 'E116:']) ! call CheckDefAndScriptFailure(['var v = range(5)[2 : () => 2(]'], 'E15:') ! call CheckLegacyAndVim9Failure(['VAR v = range(5)[2 : 3'], ['E111:', 'E1097:', 'E111:']) ! call CheckLegacyAndVim9Failure(['VAR l = insert([1, 2, 3], 4, 10)'], 'E684:') ! call CheckLegacyAndVim9Failure(['VAR l = insert([1, 2, 3], 4, -10)'], 'E684:') ! call CheckLegacyAndVim9Failure(['VAR l = insert([1, 2, 3], 4, [])'], ['E745:', 'E1013:', 'E1210:']) ! ! call CheckLegacyAndVim9Failure(['VAR l = [1, 2, 3]', 'LET l[i] = 3'], ['E121:', 'E1001:', 'E121:']) ! call CheckLegacyAndVim9Failure(['VAR l = [1, 2, 3]', 'LET l[1.1] = 4'], ['E805:', 'E1012:', 'E805:']) ! call CheckLegacyAndVim9Failure(['VAR l = [1, 2, 3]', 'LET l[: i] = [4, 5]'], ['E121:', 'E1001:', 'E121:']) ! call CheckLegacyAndVim9Failure(['VAR l = [1, 2, 3]', 'LET l[: 3.2] = [4, 5]'], ['E805:', 'E1012:', 'E805:']) ! call CheckLegacyAndVim9Failure(['VAR t = test_unknown()', 'echo t[0]'], 'E685:') endfunc " Test for a null list --- 1318,1347 ---- " List and dict indexing tests func Test_listdict_index() ! call v9.CheckLegacyAndVim9Failure(['echo function("min")[0]'], 'E695:') ! call v9.CheckLegacyAndVim9Failure(['echo v:true[0]'], 'E909:') ! call v9.CheckLegacyAndVim9Failure(['echo v:null[0]'], 'E909:') ! call v9.CheckLegacyAndVim9Failure(['VAR d = {"k": 10}', 'echo d.'], ['E15:', 'E1127:', 'E15:']) ! call v9.CheckLegacyAndVim9Failure(['VAR d = {"k": 10}', 'echo d[1 : 2]'], 'E719:') call assert_fails("let v = [4, 6][{-> 1}]", 'E729:') ! call v9.CheckDefAndScriptFailure(['var v = [4, 6][() => 1]'], ['E1012', 'E703:']) ! call v9.CheckLegacyAndVim9Failure(['VAR v = range(5)[2 : []]'], ['E730:', 'E1012:', 'E730:']) call assert_fails("let v = range(5)[2:{-> 2}(]", ['E15:', 'E116:']) ! call v9.CheckDefAndScriptFailure(['var v = range(5)[2 : () => 2(]'], 'E15:') ! call v9.CheckLegacyAndVim9Failure(['VAR v = range(5)[2 : 3'], ['E111:', 'E1097:', 'E111:']) ! call v9.CheckLegacyAndVim9Failure(['VAR l = insert([1, 2, 3], 4, 10)'], 'E684:') ! call v9.CheckLegacyAndVim9Failure(['VAR l = insert([1, 2, 3], 4, -10)'], 'E684:') ! call v9.CheckLegacyAndVim9Failure(['VAR l = insert([1, 2, 3], 4, [])'], ['E745:', 'E1013:', 'E1210:']) ! ! call v9.CheckLegacyAndVim9Failure(['VAR l = [1, 2, 3]', 'LET l[i] = 3'], ['E121:', 'E1001:', 'E121:']) ! call v9.CheckLegacyAndVim9Failure(['VAR l = [1, 2, 3]', 'LET l[1.1] = 4'], ['E805:', 'E1012:', 'E805:']) ! call v9.CheckLegacyAndVim9Failure(['VAR l = [1, 2, 3]', 'LET l[: i] = [4, 5]'], ['E121:', 'E1001:', 'E121:']) ! call v9.CheckLegacyAndVim9Failure(['VAR l = [1, 2, 3]', 'LET l[: 3.2] = [4, 5]'], ['E805:', 'E1012:', 'E805:']) ! call v9.CheckLegacyAndVim9Failure(['VAR t = test_unknown()', 'echo t[0]'], 'E685:') endfunc " Test for a null list *************** *** 1379,1385 **** call assert_equal([], sort(l)) call assert_equal('[]', string(l)) END ! call CheckLegacyAndVim9Success(lines) let l = test_null_list() call assert_equal([], extend(l, l, 0)) --- 1379,1385 ---- call assert_equal([], sort(l)) call assert_equal('[]', string(l)) END ! call v9.CheckLegacyAndVim9Success(lines) let l = test_null_list() call assert_equal([], extend(l, l, 0)) *************** *** 1420,1426 **** call assert_equal(0, remove(test_null_dict(), 'k')) call assert_equal('{}', string(d)) END ! call CheckLegacyAndVim9Success(lines) let d = test_null_dict() call assert_equal({}, extend(d, d, 'keep')) --- 1420,1426 ---- call assert_equal(0, remove(test_null_dict(), 'k')) call assert_equal('{}', string(d)) END ! call v9.CheckLegacyAndVim9Success(lines) let d = test_null_dict() call assert_equal({}, extend(d, d, 'keep')) *** ../vim-8.2.4256/src/testdir/test_mapping.vim 2022-01-20 11:17:14.552366205 +0000 --- src/testdir/test_mapping.vim 2022-01-29 21:24:23.033726046 +0000 *************** *** 4,10 **** source check.vim source screendump.vim source term_util.vim ! source vim9.vim func Test_abbreviation() " abbreviation with 0x80 should work --- 4,10 ---- source check.vim source screendump.vim source term_util.vim ! import './vim9.vim' as v9 func Test_abbreviation() " abbreviation with 0x80 should work *************** *** 1415,1421 **** vim9script nnoremap eval 1 + 2 END ! call CheckScriptSuccess(lines) call feedkeys("\:let g:result = 3+4\", 'xtc') call assert_equal(7, g:result) --- 1415,1421 ---- vim9script nnoremap eval 1 + 2 END ! call v9.CheckScriptSuccess(lines) call feedkeys("\:let g:result = 3+4\", 'xtc') call assert_equal(7, g:result) *************** *** 1431,1437 **** g:func_called = 'yes' enddef END ! call CheckScriptSuccess(lines) call feedkeys("y\\", 'xtc') call assert_equal('yes', g:func_called) --- 1431,1437 ---- g:func_called = 'yes' enddef END ! call v9.CheckScriptSuccess(lines) call feedkeys("y\\", 'xtc') call assert_equal('yes', g:func_called) *************** *** 1449,1455 **** feedkeys("\\", 'xct') assert_equal(123, b:result) END ! call CheckScriptSuccess(lines) nunmap unlet b:result --- 1449,1455 ---- feedkeys("\\", 'xct') assert_equal(123, b:result) END ! call v9.CheckScriptSuccess(lines) nunmap unlet b:result *** ../vim-8.2.4256/src/testdir/test_normal.vim 2022-01-27 13:16:54.332078790 +0000 --- src/testdir/test_normal.vim 2022-01-29 21:25:18.116841338 +0000 *************** *** 3,9 **** source shared.vim source check.vim source view_util.vim ! source vim9.vim func Setup_NewWindow() 10new --- 3,9 ---- source shared.vim source check.vim source view_util.vim ! import './vim9.vim' as v9 func Setup_NewWindow() 10new *************** *** 626,632 **** normal! g@l call assert_equal([23, 'char'], g:OpFunc1Args) END ! call CheckTransLegacySuccess(lines) " Test for using a script-local function name func s:OpFunc3(type) --- 626,632 ---- normal! g@l call assert_equal([23, 'char'], g:OpFunc1Args) END ! call v9.CheckTransLegacySuccess(lines) " Test for using a script-local function name func s:OpFunc3(type) *************** *** 693,699 **** assert_equal(['char'], g:LocalOpFuncArgs) bw! END ! call CheckScriptSuccess(lines) " setting 'opfunc' to a script local function outside of a script context " should fail --- 693,699 ---- assert_equal(['char'], g:LocalOpFuncArgs) bw! END ! call v9.CheckScriptSuccess(lines) " setting 'opfunc' to a script local function outside of a script context " should fail *** ../vim-8.2.4256/src/testdir/test_popupwin.vim 2021-11-29 17:37:38.063265208 +0000 --- src/testdir/test_popupwin.vim 2022-01-29 21:40:17.658749622 +0000 *************** *** 2801,2807 **** assert_equal(2, winnr()) var buf = term_start(&shell, {hidden: 1}) popup_create(buf, {}) ! TermWait(buf, 100) popup_clear(true) assert_equal(2, winnr()) --- 2801,2807 ---- assert_equal(2, winnr()) var buf = term_start(&shell, {hidden: 1}) popup_create(buf, {}) ! g:TermWait(buf, 100) popup_clear(true) assert_equal(2, winnr()) *** ../vim-8.2.4256/src/testdir/test_profile.vim 2021-03-05 19:58:19.240480141 +0000 --- src/testdir/test_profile.vim 2022-01-29 21:26:10.987995915 +0000 *************** *** 5,11 **** source shared.vim source screendump.vim - source vim9.vim func Test_profile_func() call RunProfileFunc('func', 'let', 'let') --- 5,10 ---- *** ../vim-8.2.4256/src/testdir/test_quickfix.vim 2021-12-17 16:21:14.911650274 +0000 --- src/testdir/test_quickfix.vim 2022-01-29 21:27:52.510381665 +0000 *************** *** 1,7 **** " Test for the quickfix feature. source check.vim ! source vim9.vim CheckFeature quickfix source screendump.vim --- 1,7 ---- " Test for the quickfix feature. source check.vim ! import './vim9.vim' as v9 CheckFeature quickfix source screendump.vim *************** *** 5347,5353 **** cclose #" Test for using a lambda function with set ! VAR optval = "LSTART a LMIDDLE Tqfexpr(a) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set qftf=" .. optval cexpr "F6:6:6:L6" --- 5347,5353 ---- cclose #" Test for using a lambda function with set ! VAR optval = "LSTART a LMIDDLE g:Tqfexpr(a) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set qftf=" .. optval cexpr "F6:6:6:L6" *************** *** 5356,5376 **** cclose #" Set 'quickfixtextfunc' to a lambda expression ! LET &qftf = LSTART a LMIDDLE Tqfexpr(a) LEND cexpr "F7:7:7:L7" copen call assert_equal('F7-L7C7-L7', getline(1)) cclose #" Set 'quickfixtextfunc' to string(lambda_expression) ! LET &qftf = "LSTART a LMIDDLE Tqfexpr(a) LEND" cexpr "F8:8:8:L8" copen call assert_equal('F8-L8C8-L8', getline(1)) cclose #" Set 'quickfixtextfunc' to a variable with a lambda expression ! VAR Lambda = LSTART a LMIDDLE Tqfexpr(a) LEND LET &qftf = Lambda cexpr "F9:9:9:L9" copen --- 5356,5376 ---- cclose #" Set 'quickfixtextfunc' to a lambda expression ! LET &qftf = LSTART a LMIDDLE g:Tqfexpr(a) LEND cexpr "F7:7:7:L7" copen call assert_equal('F7-L7C7-L7', getline(1)) cclose #" Set 'quickfixtextfunc' to string(lambda_expression) ! LET &qftf = "LSTART a LMIDDLE g:Tqfexpr(a) LEND" cexpr "F8:8:8:L8" copen call assert_equal('F8-L8C8-L8', getline(1)) cclose #" Set 'quickfixtextfunc' to a variable with a lambda expression ! VAR Lambda = LSTART a LMIDDLE g:Tqfexpr(a) LEND LET &qftf = Lambda cexpr "F9:9:9:L9" copen *************** *** 5378,5391 **** cclose #" Set 'quickfixtextfunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a LMIDDLE Tqfexpr(a) LEND LET &qftf = string(Lambda) cexpr "F9:9:9:L9" copen call assert_equal('F9-L9C9-L9', getline(1)) cclose END ! call CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:TqfFunc2(info) --- 5378,5391 ---- cclose #" Set 'quickfixtextfunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a LMIDDLE g:Tqfexpr(a) LEND LET &qftf = string(Lambda) cexpr "F9:9:9:L9" copen call assert_equal('F9-L9C9-L9', getline(1)) cclose END ! call v9.CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:TqfFunc2(info) *** ../vim-8.2.4256/src/testdir/test_tagfunc.vim 2021-12-17 16:21:14.911650274 +0000 --- src/testdir/test_tagfunc.vim 2022-01-29 21:29:22.088965849 +0000 *************** *** 1,6 **** " Test 'tagfunc' ! source vim9.vim source check.vim source screendump.vim --- 1,6 ---- " Test 'tagfunc' ! import './vim9.vim' as v9 source check.vim source screendump.vim *************** *** 200,206 **** bw! #" Test for using a lambda function ! VAR optval = "LSTART a, b, c LMIDDLE TagFunc1(16, a, b, c) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set tagfunc=" .. optval new --- 200,206 ---- bw! #" Test for using a lambda function ! VAR optval = "LSTART a, b, c LMIDDLE g:TagFunc1(16, a, b, c) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set tagfunc=" .. optval new *************** *** 210,216 **** bw! #" Set 'tagfunc' to a lambda expression ! LET &tagfunc = LSTART a, b, c LMIDDLE TagFunc1(17, a, b, c) LEND new LET g:TagFunc1Args = [] call assert_fails('tag a18', 'E433:') --- 210,216 ---- bw! #" Set 'tagfunc' to a lambda expression ! LET &tagfunc = LSTART a, b, c LMIDDLE g:TagFunc1(17, a, b, c) LEND new LET g:TagFunc1Args = [] call assert_fails('tag a18', 'E433:') *************** *** 218,224 **** bw! #" Set 'tagfunc' to a string(lambda expression) ! LET &tagfunc = 'LSTART a, b, c LMIDDLE TagFunc1(18, a, b, c) LEND' new LET g:TagFunc1Args = [] call assert_fails('tag a18', 'E433:') --- 218,224 ---- bw! #" Set 'tagfunc' to a string(lambda expression) ! LET &tagfunc = 'LSTART a, b, c LMIDDLE g:TagFunc1(18, a, b, c) LEND' new LET g:TagFunc1Args = [] call assert_fails('tag a18', 'E433:') *************** *** 226,232 **** bw! #" Set 'tagfunc' to a variable with a lambda expression ! VAR Lambda = LSTART a, b, c LMIDDLE TagFunc1(19, a, b, c) LEND LET &tagfunc = Lambda new LET g:TagFunc1Args = [] --- 226,232 ---- bw! #" Set 'tagfunc' to a variable with a lambda expression ! VAR Lambda = LSTART a, b, c LMIDDLE g:TagFunc1(19, a, b, c) LEND LET &tagfunc = Lambda new LET g:TagFunc1Args = [] *************** *** 235,241 **** bw! #" Set 'tagfunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a, b, c LMIDDLE TagFunc1(20, a, b, c) LEND LET &tagfunc = string(Lambda) new LET g:TagFunc1Args = [] --- 235,241 ---- bw! #" Set 'tagfunc' to a string(variable with a lambda expression) ! LET Lambda = LSTART a, b, c LMIDDLE g:TagFunc1(20, a, b, c) LEND LET &tagfunc = string(Lambda) new LET g:TagFunc1Args = [] *************** *** 265,271 **** call assert_equal([], g:TagFunc2Args) bw! END ! call CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:TagFunc3(pat, flags, info) --- 265,271 ---- call assert_equal([], g:TagFunc2Args) bw! END ! call v9.CheckLegacyAndVim9Success(lines) " Test for using a script-local function name func s:TagFunc3(pat, flags, info) *************** *** 380,386 **** assert_equal(['a12', '', {}], g:LocalTagFuncArgs) bw! END ! call CheckScriptSuccess(lines) " cleanup delfunc TagFunc1 --- 380,386 ---- assert_equal(['a12', '', {}], g:LocalTagFuncArgs) bw! END ! call v9.CheckScriptSuccess(lines) " cleanup delfunc TagFunc1 *** ../vim-8.2.4256/src/testdir/test_textprop.vim 2021-12-02 19:46:38.798969031 +0000 --- src/testdir/test_textprop.vim 2022-01-29 21:32:04.614413130 +0000 *************** *** 5,11 **** CheckFeature textprop source screendump.vim ! source vim9.vim func Test_proptype_global() call prop_type_add('comment', {'highlight': 'Directory', 'priority': 123, 'start_incl': 1, 'end_incl': 1}) --- 5,11 ---- CheckFeature textprop source screendump.vim ! import './vim9.vim' as v9 func Test_proptype_global() call prop_type_add('comment', {'highlight': 'Directory', 'priority': 123, 'start_incl': 1, 'end_incl': 1}) *************** *** 429,438 **** def Test_prop_remove_vim9() new ! AddPropTypes() ! SetupPropsInFirstLine() assert_equal(1, prop_remove({type: 'three', id: 13, both: true, all: true})) ! DeletePropTypes() bwipe! enddef --- 429,438 ---- def Test_prop_remove_vim9() new ! g:AddPropTypes() ! g:SetupPropsInFirstLine() assert_equal(1, prop_remove({type: 'three', id: 13, both: true, all: true})) ! g:DeletePropTypes() bwipe! enddef *************** *** 1704,1710 **** func Test_prop_list() let lines =<< trim END new ! call AddPropTypes() call setline(1, repeat([repeat('a', 60)], 10)) call prop_add(1, 4, {'type': 'one', 'id': 5, 'end_col': 6}) call prop_add(1, 5, {'type': 'two', 'id': 10, 'end_col': 7}) --- 1704,1710 ---- func Test_prop_list() let lines =<< trim END new ! call g:AddPropTypes() call setline(1, repeat([repeat('a', 60)], 10)) call prop_add(1, 4, {'type': 'one', 'id': 5, 'end_col': 6}) call prop_add(1, 5, {'type': 'two', 'id': 10, 'end_col': 7}) *************** *** 1844,1853 **** bunload! Xaaa call assert_equal([], prop_list(1, {'bufnr': bnr, 'end_lnum': -1})) ! call DeletePropTypes() :%bw! END ! call CheckLegacyAndVim9Success(lines) endfunc " vim: shiftwidth=2 sts=2 expandtab --- 1844,1853 ---- bunload! Xaaa call assert_equal([], prop_list(1, {'bufnr': bnr, 'end_lnum': -1})) ! call g:DeletePropTypes() :%bw! END ! call v9.CheckLegacyAndVim9Success(lines) endfunc " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.4256/src/testdir/test_usercommands.vim 2022-01-17 19:06:52.458100460 +0000 --- src/testdir/test_usercommands.vim 2022-01-29 21:32:48.737723044 +0000 *************** *** 1,6 **** " Tests for user defined commands ! source vim9.vim " Test for in user defined commands function Test_cmdmods() --- 1,6 ---- " Tests for user defined commands ! import './vim9.vim' as v9 " Test for in user defined commands function Test_cmdmods() *************** *** 287,299 **** vim9script com! -complete=file DoCmd : END ! call CheckScriptFailure(lines, 'E1208', 2) let lines =<< trim END vim9script com! -nargs=0 -complete=file DoCmd : END ! call CheckScriptFailure(lines, 'E1208', 2) com! -nargs=0 DoCmd : call assert_fails('DoCmd x', 'E488:') --- 287,299 ---- vim9script com! -complete=file DoCmd : END ! call v9.CheckScriptFailure(lines, 'E1208', 2) let lines =<< trim END vim9script com! -nargs=0 -complete=file DoCmd : END ! call v9.CheckScriptFailure(lines, 'E1208', 2) com! -nargs=0 DoCmd : call assert_fails('DoCmd x', 'E488:') *************** *** 645,651 **** command DoesNotEnd { echo 'hello' END ! call CheckScriptFailure(lines, 'E1026:') let lines =<< trim END command HelloThere { --- 645,651 ---- command DoesNotEnd { echo 'hello' END ! call v9.CheckScriptFailure(lines, 'E1026:') let lines =<< trim END command HelloThere { *************** *** 653,659 **** } HelloThere END ! call CheckScriptSuccess(lines) delcommand HelloThere let lines =<< trim END --- 653,659 ---- } HelloThere END ! call v9.CheckScriptSuccess(lines) delcommand HelloThere let lines =<< trim END *************** *** 664,670 **** } BadCommand END ! call CheckScriptFailure(lines, 'E1128:') endfunc func Test_delcommand_buffer() --- 664,670 ---- } BadCommand END ! call v9.CheckScriptFailure(lines, 'E1128:') endfunc func Test_delcommand_buffer() *** ../vim-8.2.4256/src/version.c 2022-01-29 15:27:55.030578234 +0000 --- src/version.c 2022-01-29 15:57:02.629507791 +0000 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 4257, /**/ -- "Lisp has all the visual appeal of oatmeal with nail clippings thrown in." -- Larry Wall /// 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 ///