summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-04-04 20:49:50 +0200
committerBram Moolenaar <Bram@vim.org>2021-04-04 20:49:50 +0200
commit90193e6140e5e7f1945e3e144a95697b0e16237a (patch)
tree972a396bb2bf0330c423034e7c3bb32605f407a6
parent26af8e54ff0d423b7258ef84d175c8570740629a (diff)
patch 8.2.2710: Vim9: not all tests cover script and :def functionv8.2.2710
Problem: Vim9: not all tests cover script and :def function. Solution: Run tests in both if possible. Fix differences.
-rw-r--r--src/eval.c19
-rw-r--r--src/testdir/test_vim9_expr.vim1435
-rw-r--r--src/testdir/vim9.vim20
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c4
-rw-r--r--src/vim9execute.c13
6 files changed, 756 insertions, 737 deletions
diff --git a/src/eval.c b/src/eval.c
index f5fd3e0184..55fda77aa4 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2330,7 +2330,7 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
{
if (evaluate && vim9script && !VIM_ISWHITE(p[-1]))
{
- error_white_both(p, 1);
+ error_white_both(p, op_falsy ? 2 : 1);
clear_tv(rettv);
return FAIL;
}
@@ -2361,7 +2361,7 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
++*arg;
if (evaluate && vim9script && !IS_WHITE_OR_NUL((*arg)[1]))
{
- error_white_both(p, 1);
+ error_white_both(p, op_falsy ? 2 : 1);
clear_tv(rettv);
return FAIL;
}
@@ -2774,7 +2774,7 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
*/
if (evaluate && vim9script && !IS_WHITE_OR_NUL(p[len]))
{
- error_white_both(p, 1);
+ error_white_both(p, len);
clear_tv(rettv);
return FAIL;
}
@@ -3438,9 +3438,16 @@ eval7(
case '@': ++*arg;
if (evaluate)
{
- rettv->v_type = VAR_STRING;
- rettv->vval.v_string = get_reg_contents(**arg,
- GREG_EXPR_SRC);
+ if (in_vim9script() && IS_WHITE_OR_NUL(**arg))
+ semsg(_(e_syntax_error_at_str), *arg);
+ else if (in_vim9script() && !valid_yank_reg(**arg, FALSE))
+ emsg_invreg(**arg);
+ else
+ {
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = get_reg_contents(**arg,
+ GREG_EXPR_SRC);
+ }
}
if (**arg != NUL)
++*arg;
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 4758feca60..f5a0cd5609 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -72,139 +72,131 @@ enddef
def Test_expr1_trinary_vimscript()
# check line continuation
var lines =<< trim END
- vim9script
var name = 1
? 'yes'
: 'no'
assert_equal('yes', name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:false
? 'yes'
: 'no'
assert_equal('no', name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:false ?
'yes' :
'no'
assert_equal('no', name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:false ? # comment
'yes' :
# comment
'no' # comment
assert_equal('no', name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
# check white space
lines =<< trim END
- vim9script
var name = v:true?1:2
END
- CheckScriptFailure(lines, 'E1004: White space required before and after ''?'' at "?1:2"', 2)
+ CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''?'' at "?1:2"', 1)
+
lines =<< trim END
- vim9script
var name = v:true? 1 : 2
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
var name = v:true ?1 : 2
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
var name = v:true ? 1: 2
END
- CheckScriptFailure(lines, 'E1004: White space required before and after '':'' at ": 2"', 2)
+ CheckDefAndScriptFailure(lines, 'E1004: White space required before and after '':'' at ": 2"', 1)
+
lines =<< trim END
- vim9script
var name = v:true ? 1 :2
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
lines =<< trim END
- vim9script
var name = 'x' ? 1 : 2
END
- CheckScriptFailure(lines, 'E1135:', 2)
+ CheckDefAndScriptFailure(lines, 'E1135:', 1)
lines =<< trim END
- vim9script
var name = [] ? 1 : 2
END
- CheckScriptFailure(lines, 'E745:', 2)
+ CheckDefExecAndScriptFailure(lines, 'E745:', 1)
lines =<< trim END
- vim9script
var name = {} ? 1 : 2
END
- CheckScriptFailure(lines, 'E728:', 2)
+ CheckDefExecAndScriptFailure(lines, 'E728:', 1)
# check after failure eval_flags is reset
lines =<< trim END
- vim9script
try
eval('0 ? 1: 2')
catch
endtry
assert_equal(v:true, eval(string(v:true)))
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
try
eval('0 ? 1 :2')
catch
endtry
assert_equal(v:true, eval(string(v:true)))
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
enddef
func Test_expr1_trinary_fails()
- call CheckDefFailure(["var x = 1 ? 'one'"], "Missing ':' after '?'", 1)
+ call CheckDefAndScriptFailure(["var x = 1 ? 'one'"], "Missing ':' after '?'", 1)
let msg = "White space required before and after '?'"
- call CheckDefFailure(["var x = 1? 'one' : 'two'"], msg, 1)
- call CheckDefFailure(["var x = 1 ?'one' : 'two'"], msg, 1)
- call CheckDefFailure(["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)
+ call CheckDefAndScriptFailure(["var x = 1?'one' : 'two'"], msg, 1)
let msg = "White space required before and after ':'"
- call CheckDefFailure(["var x = 1 ? 'one': 'two'"], msg, 1)
- call CheckDefFailure(["var x = 1 ? 'one' :'two'"], msg, 1)
- call CheckDefFailure(["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)
+ call CheckDefAndScriptFailure(["var x = 1 ? 'one':'two'"], msg, 1)
- call CheckDefFailure(["var x = 'x' ? 'one' : 'two'"], 'E1135:', 1)
- call CheckDefFailure(["var x = 0z1234 ? 'one' : 'two'"], 'E974:', 1)
- call CheckDefExecFailure(["var x = [] ? 'one' : 'two'"], 'E745:', 1)
- call CheckDefExecFailure(["var x = {} ? 'one' : 'two'"], 'E728:', 1)
+ 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 CheckDefExecFailure(["var x = true ? xxx : 'foo'"], 'E1001:', 1)
- call CheckDefExecFailure(["var x = false ? 'foo' : xxx"], 'E1001:', 1)
+ call CheckDefExecAndScriptFailure2(["var x = true ? xxx : 'foo'"], 'E1001:', 'E121:', 1)
+ call CheckDefExecAndScriptFailure2(["var x = false ? 'foo' : xxx"], 'E1001:', 'E121:', 1)
if has('float')
- call CheckDefFailure(["var x = 0.1 ? 'one' : 'two'"], 'E805:', 1)
+ call CheckDefAndScriptFailure(["var x = 0.1 ? 'one' : 'two'"], 'E805:', 1)
endif
" missing argument detected even when common type is used
- call CheckDefFailure([
+ call CheckDefAndScriptFailure([
\ 'var X = FuncOne',
\ 'var Y = FuncTwo',
\ 'var Z = g:cond ? FuncOne : FuncTwo',
@@ -234,9 +226,9 @@ def Test_expr1_falsy()
CheckDefAndScriptSuccess(lines)
var msg = "White space required before and after '??'"
- call CheckDefFailure(["var x = 1?? 'one' : 'two'"], msg, 1)
- call CheckDefFailure(["var x = 1 ??'one' : 'two'"], msg, 1)
- call CheckDefFailure(["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)
+ call CheckDefAndScriptFailure(["var x = 1??'one' : 'two'"], msg, 1)
enddef
def Record(val: any): any
@@ -297,33 +289,29 @@ enddef
def Test_expr2_vimscript()
# check line continuation
var lines =<< trim END
- vim9script
var name = 0
|| 1
assert_equal(true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:false
|| v:true
|| v:false
assert_equal(v:true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:false ||
v:true ||
v:false
assert_equal(v:true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:false || # comment
# comment
v:true ||
@@ -331,42 +319,46 @@ def Test_expr2_vimscript()
v:false # comment
assert_equal(v:true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
# check white space
lines =<< trim END
- vim9script
var name = v:true||v:true
END
- CheckScriptFailure(lines, 'E1004: White space required before and after ''||'' at "||v:true"', 2)
+ CheckDefExecAndScriptFailure(lines, 'E1004: White space required before and after ''||'' at "||v:true"', 1)
+
lines =<< trim END
- vim9script
var name = v:true ||v:true
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
var name = v:true|| v:true
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
enddef
def Test_expr2_fails()
var msg = "White space required before and after '||'"
- call CheckDefFailure(["var x = 1||2"], msg, 1)
- call CheckDefFailure(["var x = 1 ||2"], msg, 1)
- call CheckDefFailure(["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"], 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 CheckDefFailure(["var x = [] || false"], 'E1012:', 1)
- call CheckDefFailure(["if 'yes' || 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 1)
+
+ call CheckDefAndScriptFailure2(["var x = [] || false"], 'E1012:', 'E745:', 1)
+
+ call CheckDefAndScriptFailure2(["if 'yes' || 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 'E1135: Using a String as a Bool', 1)
# TODO: should fail at compile time
- call CheckDefExecFailure(["var x = 3 || 7"], 'E1023:', 1)
- call CheckScriptFailure(["vim9script", "var x = 3 || 7"], 'E1023:', 2)
- call CheckScriptFailure(["vim9script", "var x = [] || false"], 'E745:', 2)
+ call CheckDefExecAndScriptFailure(["var x = 3 || 7"], 'E1023:', 1)
+
+ call CheckDefAndScriptFailure2(["var x = [] || false"], 'E1012: Type mismatch; expected bool but got list<unknown>', 'E745:', 1)
+
enddef
" test &&
@@ -413,33 +405,29 @@ enddef
def Test_expr3_vimscript()
# check line continuation
var lines =<< trim END
- vim9script
var name = 0
&& 1
assert_equal(false, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:true
&& v:true
&& v:true
assert_equal(v:true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:true &&
v:true &&
v:true
assert_equal(v:true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = v:true && # comment
# comment
v:true &&
@@ -447,49 +435,49 @@ def Test_expr3_vimscript()
v:true
assert_equal(v:true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
# check white space
lines =<< trim END
- vim9script
var name = v:true&&v:true
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
var name = v:true &&v:true
END
- CheckScriptFailure(lines, 'E1004: White space required before and after ''&&'' at "&&v:true"', 2)
+ CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''&&'' at "&&v:true"', 1)
+
lines =<< trim END
- vim9script
var name = v:true&& v:true
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
enddef
def Test_expr3_fails()
var msg = "White space required before and after '&&'"
- CheckDefFailure(["var x = 1&&2"], msg, 1)
- CheckDefFailure(["var x = 1 &&2"], msg, 1)
- CheckDefFailure(["var x = 1&& 2"], msg, 1)
+ CheckDefAndScriptFailure(["var x = 1&&2"], msg, 1)
+ CheckDefAndScriptFailure(["var x = 1 &&2"], msg, 1)
+ CheckDefAndScriptFailure(["var x = 1&& 2"], msg, 1)
- CheckDefFailure(["if 'yes' && 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 1)
+ g:vals = []
+ CheckDefAndScriptFailure2(["if 'yes' && 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 'E1135: Using a String as a Bool', 1)
- CheckDefExecFailure(['assert_equal(false, Record(1) && Record(4) && Record(0))'], 'E1023: Using a Number as a Bool: 4', 1)
+ CheckDefExecAndScriptFailure(['assert_equal(false, Record(1) && Record(4) && Record(0))'], 'E1023: Using a Number as a Bool: 4', 1)
var lines =<< trim END
if 3
&& true
endif
END
- CheckDefExecFailure(lines, 'E1023:', 1)
+ CheckDefExecAndScriptFailure(lines, 'E1023:', 1)
lines =<< trim END
if 'yes'
&& true
endif
END
- CheckDefFailure(lines, 'E1012:', 1)
+ CheckDefAndScriptFailure2(lines, 'E1012:', 'E1135: Using a String as a Bool', 1)
enddef
" global variables to use for tests with the "any" type
@@ -607,18 +595,19 @@ def Test_expr4_equal()
END
CheckDefAndScriptSuccess(lines)
- CheckDefFailure(["var x = 'a' == xxx"], 'E1001:', 1)
+ CheckDefAndScriptFailure2(["var x = 'a' == xxx"], 'E1001:', 'E121:', 1)
CheckDefFailure(["var x = 'a' == "], 'E1097:', 3)
+ CheckScriptFailure(['vim9script', "var x = 'a' == "], 'E15:', 2)
- CheckDefExecFailure(['var items: any', 'eval 1', 'eval 2', 'if items == []', 'endif'], 'E691:', 4)
+ CheckDefExecAndScriptFailure2(['var items: any', 'eval 1', 'eval 2', 'if items == []', 'endif'], 'E691:', 'E1072:', 4)
- CheckDefExecFailure(['var x: any = "a"', 'echo x == true'], 'E1072: Cannot compare string with bool', 2)
- CheckDefExecFailure(["var x: any = true", 'echo x == ""'], 'E1072: Cannot compare bool with string', 2)
- CheckDefExecFailure(["var x: any = 99", 'echo x == true'], 'E1138', 2)
- CheckDefExecFailure(["var x: any = 'a'", 'echo x == 99'], 'E1030:', 2)
+ 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)
+ CheckDefExecAndScriptFailure2(["var x: any = 99", 'echo x == true'], 'E1138', 'E1072:', 2)
+ CheckDefExecAndScriptFailure2(["var x: any = 'a'", 'echo x == 99'], 'E1030:', 'E1072:', 2)
for op in ['>', '>=', '<', '<=', '=~', '!~']
- CheckDefExecFailure([
+ CheckDefExecAndScriptFailure([
"var a: any = 'a'",
'var b: any = true',
'echo a ' .. op .. ' b'], 'E1072:', 3)
@@ -877,190 +866,178 @@ enddef
def Test_expr4_vim9script()
# check line continuation
var lines =<< trim END
- vim9script
var name = 0
< 1
assert_equal(true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = 123
# comment
!= 123
assert_equal(false, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = 123 ==
123
assert_equal(true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var list = [1, 2, 3]
var name = list
is list
assert_equal(true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var list = [1, 2, 3]
var name = list # comment
# comment
is list
assert_equal(true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var myblob = 0z1234
var name = myblob
isnot 0z11
assert_equal(true, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
# spot check mismatching types
lines =<< trim END
- vim9script
echo '' == 0
END
- CheckScriptFailure(lines, 'E1072:', 2)
+ CheckDefAndScriptFailure(lines, 'E1072:', 1)
lines =<< trim END
- vim9script
echo v:true > v:false
END
- CheckScriptFailure(lines, 'Cannot compare bool with bool', 2)
+ CheckDefAndScriptFailure(lines, 'Cannot compare bool with bool', 1)
lines =<< trim END
- vim9script
echo 123 is 123
END
- CheckScriptFailure(lines, 'Cannot use "is" with number', 2)
+ CheckDefAndScriptFailure(lines, 'Cannot use "is" with number', 1)
# check missing white space
lines =<< trim END
- vim9script
echo 2>3
END
- CheckScriptFailure(lines, 'E1004: White space required before and after ''>'' at ">3"', 2)
+ CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''>'' at ">3"', 1)
+
lines =<< trim END
- vim9script
echo 2 >3
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
echo 2> 3
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
echo 2!=3
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
echo 2 !=3
END
- CheckScriptFailure(lines, 'E1004: White space required before and after ''!'' at "!=3"', 2)
+ CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''!='' at "!=3"', 1)
+
lines =<< trim END
- vim9script
echo 2!= 3
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
lines =<< trim END
- vim9script
echo len('xxx') == 3
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var line = 'abc'
echo line[1] =~ '\w'
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
enddef
func Test_expr4_fails()
let msg = "White space required before and after '>'"
- call CheckDefFailure(["var x = 1>2"], msg, 1)
- call CheckDefFailure(["var x = 1 >2"], msg, 1)
- call CheckDefFailure(["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"], msg, 1)
let msg = "White space required before and after '=='"
- call CheckDefFailure(["var x = 1==2"], msg, 1)
- call CheckDefFailure(["var x = 1 ==2"], msg, 1)
- call CheckDefFailure(["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"], msg, 1)
let msg = "White space required before and after 'is'"
- call CheckDefFailure(["var x = '1'is'2'"], msg, 1)
- call CheckDefFailure(["var x = '1' is'2'"], msg, 1)
- call CheckDefFailure(["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)
+ call CheckDefAndScriptFailure(["var x = '1'is '2'"], msg, 1)
let msg = "White space required before and after 'isnot'"
- call CheckDefFailure(["var x = '1'isnot'2'"], msg, 1)
- call CheckDefFailure(["var x = '1' isnot'2'"], msg, 1)
- call CheckDefFailure(["var x = '1'isnot '2'"], msg, 1)
-
- call CheckDefFailure(["var x = 1 is# 2"], 'E15:', 1)
- call CheckDefFailure(["var x = 1 is? 2"], 'E15:', 1)
- call CheckDefFailure(["var x = 1 isnot# 2"], 'E15:', 1)
- call CheckDefFailure(["var x = 1 isnot? 2"], 'E15:', 1)
-
- call CheckDefFailure(["var x = 1 == '2'"], 'Cannot compare number with string', 1)
- call CheckDefFailure(["var x = '1' == 2"], 'Cannot compare string with number', 1)
- call CheckDefFailure(["var x = 1 == RetVoid()"], 'Cannot compare number with void', 1)
- call CheckDefFailure(["var x = RetVoid() == 1"], 'Cannot compare void with number', 1)
-
- call CheckDefFailure(["var x = true > false"], 'Cannot compare bool with bool', 1)
- call CheckDefFailure(["var x = true >= false"], 'Cannot compare bool with bool', 1)
- call CheckDefFailure(["var x = true < false"], 'Cannot compare bool with bool', 1)
- call CheckDefFailure(["var x = true <= false"], 'Cannot compare bool with bool', 1)
- call CheckDefFailure(["var x = true =~ false"], 'Cannot compare bool with bool', 1)
- call CheckDefFailure(["var x = true !~ false"], 'Cannot compare bool with bool', 1)
- call CheckDefFailure(["var x = true is false"], 'Cannot use "is" with bool', 1)
- call CheckDefFailure(["var x = true isnot false"], 'Cannot use "isnot" with bool', 1)
-
- call CheckDefFailure(["var x = v:none is v:null"], 'Cannot use "is" with special', 1)
- call CheckDefFailure(["var x = v:none isnot v:null"], 'Cannot use "isnot" with special', 1)
- call CheckDefFailure(["var x = 123 is 123"], 'Cannot use "is" with number', 1)
- call CheckDefFailure(["var x = 123 isnot 123"], 'Cannot use "isnot" with number', 1)
+ 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 CheckDefFailure(["var x = 1.3 is 1.3"], 'Cannot use "is" with float', 1)
- call CheckDefFailure(["var x = 1.3 isnot 1.3"], 'Cannot use "isnot" with float', 1)
+ 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 CheckDefFailure(["var x = 0za1 > 0z34"], 'Cannot compare blob with blob', 1)
- call CheckDefFailure(["var x = 0za1 >= 0z34"], 'Cannot compare blob with blob', 1)
- call CheckDefFailure(["var x = 0za1 < 0z34"], 'Cannot compare blob with blob', 1)
- call CheckDefFailure(["var x = 0za1 <= 0z34"], 'Cannot compare blob with blob', 1)
- call CheckDefFailure(["var x = 0za1 =~ 0z34"], 'Cannot compare blob with blob', 1)
- call CheckDefFailure(["var x = 0za1 !~ 0z34"], 'Cannot compare blob with blob', 1)
-
- call CheckDefFailure(["var x = [13] > [88]"], 'Cannot compare list with list', 1)
- call CheckDefFailure(["var x = [13] >= [88]"], 'Cannot compare list with list', 1)
- call CheckDefFailure(["var x = [13] < [88]"], 'Cannot compare list with list', 1)
- call CheckDefFailure(["var x = [13] <= [88]"], 'Cannot compare list with list', 1)
- call CheckDefFailure(["var x = [13] =~ [88]"], 'Cannot compare list with list', 1)
- call CheckDefFailure(["var x = [13] !~ [88]"], 'Cannot compare list with list', 1)
-
- call CheckDefFailure(['var j: job', 'var chan: channel', 'var r = j == chan'], 'Cannot compare job with channel', 3)
- call CheckDefFailure(['var j: job', 'var x: list<any>', 'var r = j == x'], 'Cannot compare job with list', 3)
- call CheckDefFailure(['var j: job', 'var Xx: func', 'var r = j == Xx'], 'Cannot compare job with func', 3)
- call CheckDefFailure(['var j: job', 'var Xx: func', 'var r = j == Xx'], 'Cannot compare job with func', 3)
+ 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<any>', '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
@@ -1132,145 +1109,129 @@ enddef
def Test_expr5_vim9script()
# check line continuation
var lines =<< trim END
- vim9script
var name = 11
+ 77
- 22
assert_equal(66, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = 11 +
77 -
22
assert_equal(66, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = 11 + # comment
77 -
# comment
22
assert_equal(66, name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
var name = 'one'
.. 'two'
assert_equal('onetwo', name)
END
- CheckScriptSuccess(lines)
+ CheckDefAndScriptSuccess(lines)
lines =<< trim END
- vim9script
echo 'abc' is# 'abc'
END
- CheckScriptFailure(lines, 'E15:', 2)
+ CheckDefAndScriptFailure(lines, 'E15:', 1)
lines =<< trim END
- vim9script
echo {} - 22
END
- CheckScriptFailure(lines, 'E728:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1036:', 'E728:', 1)
lines =<< trim END
- vim9script
echo [] - 33
END
- CheckScriptFailure(lines, 'E745:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1036:', 'E745:', 1)
lines =<< trim END
- vim9script
echo 0z1234 - 44
END
- CheckScriptFailure(lines, 'E974:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1036', 'E974:', 1)
lines =<< trim END
- vim9script
echo 'abc' is? 'abc'
END
- CheckScriptFailure(lines, 'E15:', 2)
+ CheckDefAndScriptFailure(lines, 'E15:', 1)
lines =<< trim END
- vim9script
echo 'abc' isnot# 'abc'
END
- CheckScriptFailure(lines, 'E15:', 2)
+ CheckDefAndScriptFailure(lines, 'E15:', 1)
lines =<< trim END
- vim9script
echo 'abc' isnot? 'abc'
END
- CheckScriptFailure(lines, 'E15:', 2)
+ CheckDefAndScriptFailure(lines, 'E15:', 1)
# check white space
lines =<< trim END
- vim9script
echo 5+6
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
lines =<< trim END
- vim9script
echo 5 +6
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
echo 5+ 6
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
lines =<< trim END
- vim9script
echo 'a'..'b'
END
- CheckScriptFailure(lines, 'E1004: White space required before and after ''..'' at "..''b''"', 2)
+ CheckDefAndScriptFailure(lines, 'E1004: White space required before and after ''..'' at "..''b''"', 1)
+
lines =<< trim END
- vim9script
echo 'a' ..'b'
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
+
lines =<< trim END
- vim9script
echo 'a'.. 'b'
END
- CheckScriptFailure(lines, 'E1004:', 2)
+ CheckDefAndScriptFailure(lines, 'E1004:', 1)
# check invalid string concatenation
lines =<< trim END
- vim9script
echo 'a' .. [1]
END
- CheckScriptFailure(lines, 'E730:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1105:', 'E730:', 1)
+
lines =<< trim END
- vim9script
echo 'a' .. {a: 1}
END
- CheckScriptFailure(lines, 'E731:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1105:', 'E731:', 1)
+
lines =<< trim END
- vim9script
echo 'a' .. test_void()
END
- CheckScriptFailure(lines, 'E908:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1105:', 'E908:', 1)
+
lines =<< trim END
- vim9script
echo 'a' .. 0z33
END
- CheckScriptFailure(lines, 'E976:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1105:', 'E976:', 1)
+
lines =<< trim END
- vim9script
echo 'a' .. function('len')
END
- CheckScriptFailure(lines, 'E729:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1105:', 'E729:', 1)
lines =<< trim END
- vim9script
new
['']->setline(1)
/pattern
@@ -1278,7 +1239,7 @@ def Test_expr5_vim9script()
eval 0
bwipe!
END
- CheckScriptFailure(lines, "E1004: White space required before and after '/' at \"/pattern")
+ CheckDefAndScriptFailure(lines, "E1004: White space required before and after '/' at \"/pattern", 3)
enddef
def Test_expr5_vim9script_channel()
@@ -1286,15 +1247,13 @@ def Test_expr5_vim9script_channel()
MissingFeature 'float'
else
var lines =<< trim END
- vim9script
echo 'a' .. test_null_job()
END
- CheckScriptFailure(lines, 'E908:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1105:', 'E908:', 1)
lines =<< trim END
- vim9script
echo 'a' .. test_null_channel()
END
- CheckScriptFailure(lines, 'E908:', 2)
+ CheckDefAndScriptFailure2(lines, 'E1105:', 'E908:', 1)
endif
enddef
@@ -1328,65 +1287,68 @@ enddef
func Test_expr5_fails()
let msg = "White space required before and after '+'"
- call CheckDefFailure(["var x = 1+2"], msg, 1)
- call CheckDefFailure(["var x = 1 +2"], msg, 1)
- call CheckDefFailure(["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"], msg, 1)
let msg = "White space required before and after '-'"
- call CheckDefFailure(["var x = 1-2"], msg, 1)
- call CheckDefFailure(["var x = 1 -2"], msg, 1)
- call CheckDefFailure(["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"], msg, 1)
let msg = "White space required before and after '..'"
- call CheckDefFailure(["var x = '1'..'2'"], msg, 1)
- call CheckDefFailure(["var x = '1' ..'2'"], msg, 1)
- call CheckDefFailure(["var x = '1'.. '2'"], msg, 1)
-
- call CheckDefFailure(["var x = 0z1122 + 33"], 'E1051:', 1)
- call CheckDefFailure(["var x = 0z1122 + [3]"], 'E1051:', 1)
- call CheckDefFailure(["var x = 0z1122 + 'asd'"], 'E1051:', 1)
- call CheckDefFailure(["var x = 33 + 0z1122"], 'E1051:', 1)
- call CheckDefFailure(["var x = [3] + 0z1122"], 'E1051:', 1)
- call CheckDefFailure(["var x = 'asdf' + 0z1122"], 'E1051:', 1)
- call CheckDefFailure(["var x = 6 + xxx"], 'E1001:', 1)
-
- call CheckDefFailure(["var x = 'a' .. [1]"], 'E1105:', 1)
- call CheckDefFailure(["var x = 'a' .. {a: 1}"], 'E1105:', 1)
- call CheckDefFailure(["var x = 'a' .. test_void()"], 'E1105:', 1)
- call CheckDefFailure(["var x = 'a' .. 0z32"], 'E1105:', 1)
- call CheckDefFailure(["var x = 'a' .. function('len')"], 'E1105:', 1)
- call CheckDefFailure(["var x = 'a' .. function('len', ['a'])"], 'E1105:', 1)
-
- call CheckScriptFailure(['vim9script', 'var x = 1 + v:none'], 'E611:', 2)
- call CheckScriptFailure(['vim9script', 'var x = 1 +