diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-04-04 20:49:50 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-04-04 20:49:50 +0200 |
commit | 90193e6140e5e7f1945e3e144a95697b0e16237a (patch) | |
tree | 972a396bb2bf0330c423034e7c3bb32605f407a6 | |
parent | 26af8e54ff0d423b7258ef84d175c8570740629a (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.c | 19 | ||||
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 1435 | ||||
-rw-r--r-- | src/testdir/vim9.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 4 | ||||
-rw-r--r-- | src/vim9execute.c | 13 |
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 + |