patch 8.2.0699: Vim9: not all errors tested
Problem: Vim9: not all errors tested.
Solution: Add test for deleted function. Bail out on first error.
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index ef5c00c..68eb40d 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -759,11 +759,11 @@
assert_equal(g:list_mixed, [1, 'b', false])
assert_equal('b', g:list_mixed[1])
- call CheckDefExecFailure("let x = g:anint[3]", 'E714:')
+ call CheckDefExecFailure(["let x = g:anint[3]"], 'E714:')
call CheckDefFailure(["let x = g:list_mixed[xxx]"], 'E1001:')
- call CheckDefExecFailure("let x = g:list_mixed['xx']", 'E39:')
+ call CheckDefExecFailure(["let x = g:list_mixed['xx']"], 'E39:')
call CheckDefFailure(["let x = g:list_mixed[0"], 'E111:')
- call CheckDefExecFailure("let x = g:list_empty[3]", 'E684:')
+ call CheckDefExecFailure(["let x = g:list_empty[3]"], 'E684:')
enddef
def Test_expr7_lambda()
@@ -792,8 +792,8 @@
call CheckDefFailure(["let x = #"], 'E1015:')
call CheckDefFailure(["let x += 1"], 'E1020:')
call CheckDefFailure(["let x = x + 1"], 'E1001:')
- call CheckDefExecFailure("let x = g:anint.member", 'E715:')
- call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:')
+ call CheckDefExecFailure(["let x = g:anint.member"], 'E715:')
+ call CheckDefExecFailure(["let x = g:dict_empty.member"], 'E716:')
enddef
def Test_expr_member()
@@ -899,8 +899,8 @@
call CheckDefFailure(["let x = -'xx'"], "E1030:")
call CheckDefFailure(["let x = +'xx'"], "E1030:")
call CheckDefFailure(["let x = -0z12"], "E974:")
- call CheckDefExecFailure("let x = -[8]", "E39:")
- call CheckDefExecFailure("let x = -{'a': 1}", "E39:")
+ call CheckDefExecFailure(["let x = -[8]"], "E39:")
+ call CheckDefExecFailure(["let x = -{'a': 1}"], "E39:")
call CheckDefFailure(["let x = @"], "E1002:")
call CheckDefFailure(["let x = @<"], "E354:")
@@ -914,23 +914,23 @@
call CheckDefFailure(["let x = ¬exist"], 'E113:')
call CheckDefFailure(["&grepprg = [343]"], 'E1013:')
- call CheckDefExecFailure("echo s:doesnt_exist", 'E121:')
- call CheckDefExecFailure("echo g:doesnt_exist", 'E121:')
+ call CheckDefExecFailure(["echo s:doesnt_exist"], 'E121:')
+ call CheckDefExecFailure(["echo g:doesnt_exist"], 'E121:')
call CheckDefFailure(["echo a:somevar"], 'E1075:')
call CheckDefFailure(["echo l:somevar"], 'E1075:')
call CheckDefFailure(["echo x:somevar"], 'E1075:')
- call CheckDefExecFailure("let x = +g:astring", 'E1030:')
- call CheckDefExecFailure("let x = +g:ablob", 'E974:')
- call CheckDefExecFailure("let x = +g:alist", 'E745:')
- call CheckDefExecFailure("let x = +g:adict", 'E728:')
+ call CheckDefExecFailure(["let x = +g:astring"], 'E1030:')
+ call CheckDefExecFailure(["let x = +g:ablob"], 'E974:')
+ call CheckDefExecFailure(["let x = +g:alist"], 'E745:')
+ call CheckDefExecFailure(["let x = +g:adict"], 'E728:')
call CheckDefFailure(["let x = ''", "let y = x.memb"], 'E715:')
- call CheckDefExecFailure("[1, 2->len()", 'E492:')
- call CheckDefExecFailure("#{a: 1->len()", 'E488:')
- call CheckDefExecFailure("{'a': 1->len()", 'E492:')
+ call CheckDefExecFailure(["[1, 2->len()"], 'E492:')
+ call CheckDefExecFailure(["#{a: 1->len()"], 'E488:')
+ call CheckDefExecFailure(["{'a': 1->len()"], 'E492:')
endfunc
let g:Funcrefs = [function('add')]
@@ -986,7 +986,7 @@
call CheckDefFailure(["let x = '1'is2"], 'E488:')
call CheckDefFailure(["let x = '1'isnot2"], 'E488:')
- call CheckDefExecFailure("CallMe ('yes')", 'E492:')
+ call CheckDefExecFailure(["CallMe ('yes')"], 'E492:')
call CheckDefFailure(["CallMe2('yes','no')"], 'E1069:')
call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:')
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 840c220..49dc2f2 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -642,6 +642,23 @@
call assert_equal(1, caught_1059)
endfunc
+func DelMe()
+ echo 'DelMe'
+endfunc
+
+def Test_deleted_function()
+ CheckDefExecFailure([
+ 'let RefMe: func = function("g:DelMe")',
+ 'delfunc g:DelMe',
+ 'echo RefMe()'], 'E117:')
+enddef
+
+def Test_unknown_function()
+ CheckDefExecFailure([
+ 'let Ref: func = function("NotExist")',
+ 'delfunc g:NotExist'], 'E700:')
+enddef
+
def RefFunc(Ref: func(string): string): string
return Ref('more')
enddef
diff --git a/src/testdir/vim9.vim b/src/testdir/vim9.vim
index 0e0cd1e..0c16576 100644
--- a/src/testdir/vim9.vim
+++ b/src/testdir/vim9.vim
@@ -7,6 +7,14 @@
call delete('Xdef')
endfunc
+" Check that "lines" inside ":def" results in an "error" message when executed.
+func CheckDefExecFailure(lines, error)
+ call writefile(['def Func()'] + a:lines + ['enddef'], 'Xdef')
+ so Xdef
+ call assert_fails('call Func()', a:error, a:lines)
+ call delete('Xdef')
+endfunc
+
def CheckScriptFailure(lines: list<string>, error: string)
writefile(lines, 'Xdef')
assert_fails('so Xdef', error, lines)
@@ -18,11 +26,3 @@
so Xdef
delete('Xdef')
enddef
-
-" Check that "line" inside ":def" results in an "error" message when executed.
-func CheckDefExecFailure(line, error)
- call writefile(['def! Func()', a:line, 'enddef'], 'Xdef')
- so Xdef
- call assert_fails('call Func()', a:error, a:line)
- call delete('Xdef')
-endfunc