Mercurial > vim
changeset 27756:60ac4228a73d v8.2.4404
patch 8.2.4404: Vim9: some code not covered by tests
Commit: https://github.com/vim/vim/commit/cd1cda2f877aab5ec954e14bcba59076533529a4
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Feb 16 21:48:25 2022 +0000
patch 8.2.4404: Vim9: some code not covered by tests
Problem: Vim9: some code not covered by tests.
Solution: Add a few specific test cases.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 16 Feb 2022 23:00:03 +0100 |
parents | 370e4d6397da |
children | 070988082b56 |
files | src/testdir/test_vim9_func.vim src/testdir/test_vim9_import.vim src/version.c src/vim9execute.c |
diffstat | 4 files changed, 151 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -3226,6 +3226,14 @@ def Test_partial_call() v9.CheckScriptFailure(lines, 'E1235:') enddef +def Test_partial_double_nested() + var idx = 123 + var Get = () => idx + var Ref = function(Get, []) + var RefRef = function(Ref, []) + assert_equal(123, RefRef()) +enddef + " Using "idx" from a legacy global function does not work. " This caused a crash when called from legacy context. func Test_partial_call_fails()
--- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -1185,6 +1185,137 @@ def Test_vim9_reload_noclear() delete('XreloadScript.vim') enddef +def Test_vim_reload_noclear_arg_count() + var lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string, b: string) + echo a b + enddef + def Call() + Test('a', 'b') + enddef + else + # redefine with one argument less + def Test(a: string) + echo a + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScript_1.vim') + source XreloadScript_1.vim + assert_fails('source XreloadScript_1.vim', 'E1106: One argument too many') + unlet g:didload + + lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string, b: string, c: string) + echo a b + enddef + def Call() + Test('a', 'b', 'c') + enddef + else + # redefine with one argument less + def Test(a: string) + echo a + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScript_2.vim') + source XreloadScript_2.vim + assert_fails('source XreloadScript_2.vim', 'E1106: 2 arguments too many') + unlet g:didload + + lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string) + echo a + enddef + def Call() + Test('a') + enddef + else + # redefine with one argument extra + def Test(a: string, b: string) + echo a b + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScript_3.vim') + source XreloadScript_3.vim + assert_fails('source XreloadScript_3.vim', 'E1190: One argument too few') + unlet g:didload + + lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string) + echo a + enddef + def Call() + Test('a') + enddef + else + # redefine with two arguments extra + def Test(a: string, b: string, c: string) + echo a b + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScript_4.vim') + source XreloadScript_4.vim + assert_fails('source XreloadScript_4.vim', 'E1190: 2 arguments too few') + unlet g:didload + + delete('XreloadScript_1.vim') + delete('XreloadScript_2.vim') + delete('XreloadScript_3.vim') + delete('XreloadScript_4.vim') +enddef + +def Test_vim9_reload_noclear_error() + var lines =<< trim END + vim9script noclear + + if !exists('g:didload') + def Test(a: string) + echo a + enddef + def Call() + Test('a') + enddef + else + # redefine with a compile error + def Test(a: string) + echo ax + enddef + endif + Call() + g:didload = 1 + END + lines->writefile('XreloadScriptErr.vim') + source XreloadScriptErr.vim + assert_fails('source XreloadScriptErr.vim', 'E1001: Variable not found: ax') + + unlet g:didload + delete('XreloadScriptErr.vim') +enddef + def Test_vim9_reload_import() var lines =<< trim END vim9script
--- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4404, +/**/ 4403, /**/ 4402,
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -367,6 +367,16 @@ call_dfunc( semsg(_(e_nr_arguments_too_many), -arg_to_add); return FAIL; } + else if (arg_to_add > ufunc->uf_def_args.ga_len) + { + int missing = arg_to_add - ufunc->uf_def_args.ga_len; + + if (missing == 1) + emsg(_(e_one_argument_too_few)); + else + semsg(_(e_nr_arguments_too_few), missing); + return FAIL; + } // Reserve space for: // - missing arguments