summaryrefslogtreecommitdiff
path: root/src/testdir/test_user_func.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-09-08 19:51:45 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-08 19:51:45 +0100
commit169003289fb4b2ad18fd7f5807e0d05efff0be85 (patch)
tree50602045f6b4e7ed30d2498bef163412839c8776 /src/testdir/test_user_func.vim
parent45bbaef0382c5468d9fac511775bd99ea7bf5b84 (diff)
downloadvim-git-9.0.0419.tar.gz
patch 9.0.0419: the :defer command does not check the function argumentsv9.0.0419
Problem: The :defer command does not check the function argument count and types. Solution: Check the function arguments when adding a deferred function.
Diffstat (limited to 'src/testdir/test_user_func.vim')
-rw-r--r--src/testdir/test_user_func.vim60
1 files changed, 58 insertions, 2 deletions
diff --git a/src/testdir/test_user_func.vim b/src/testdir/test_user_func.vim
index 6b1753440..4721175e7 100644
--- a/src/testdir/test_user_func.vim
+++ b/src/testdir/test_user_func.vim
@@ -5,6 +5,7 @@
source check.vim
source shared.vim
+import './vim9.vim' as v9
func Table(title, ...)
let ret = a:title
@@ -619,7 +620,7 @@ func Test_defer_quitall()
DeferLevelOne()
END
call writefile(lines, 'XdeferQuitall', 'D')
- let res = system(GetVimCommandClean() .. ' -X -S XdeferQuitall')
+ let res = system(GetVimCommand() .. ' -X -S XdeferQuitall')
call assert_equal(0, v:shell_error)
call assert_false(filereadable('XQuitallOne'))
call assert_false(filereadable('XQuitallTwo'))
@@ -641,7 +642,7 @@ func Test_defer_quitall_in_expr_func()
call Test_defer_in_funcref()
END
call writefile(lines, 'XdeferQuitallExpr', 'D')
- let res = system(GetVimCommandClean() .. ' -X -S XdeferQuitallExpr')
+ let res = system(GetVimCommand() .. ' -X -S XdeferQuitallExpr')
call assert_equal(0, v:shell_error)
call assert_false(filereadable('Xentry0'))
call assert_false(filereadable('Xentry1'))
@@ -695,5 +696,60 @@ def Test_defer_in_funcref()
assert_false(filereadable('Xentry2'))
enddef
+func Test_defer_wrong_arguments()
+ call assert_fails('defer delete()', 'E119:')
+ call assert_fails('defer FuncIndex(1)', 'E119:')
+ call assert_fails('defer delete(1, 2, 3)', 'E118:')
+ call assert_fails('defer FuncIndex(1, 2, 3)', 'E118:')
+
+ let lines =<< trim END
+ def DeferFunc0()
+ defer delete()
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E119:')
+ let lines =<< trim END
+ def DeferFunc3()
+ defer delete(1, 2, 3)
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E118:')
+ let lines =<< trim END
+ def DeferFunc2()
+ defer delete(1, 2)
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got number')
+
+ def g:FuncOneArg(arg: string)
+ echo arg
+ enddef
+
+ let lines =<< trim END
+ def DeferUserFunc0()
+ defer g:FuncOneArg()
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E119:')
+ let lines =<< trim END
+ def DeferUserFunc2()
+ defer g:FuncOneArg(1, 2)
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E118:')
+ let lines =<< trim END
+ def DeferUserFunc1()
+ defer g:FuncOneArg(1)
+ enddef
+ defcompile
+ END
+ call v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got number')
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab