1
0
forked from aniani/vim

patch 8.2.1980: Vim9: some tests are not done at the script level

Problem:    Vim9: some tests are not done at the script level.
Solution:   Use CheckDefAndScriptSuccess() in more places.  Fix uncovered
            problems.
This commit is contained in:
Bram Moolenaar
2020-11-12 20:16:39 +01:00
parent 47c5ea44b9
commit 659bb2275e
5 changed files with 683 additions and 670 deletions

View File

@@ -3438,7 +3438,15 @@ eval7_leader(
} }
#ifdef FEAT_FLOAT #ifdef FEAT_FLOAT
if (rettv->v_type == VAR_FLOAT) if (rettv->v_type == VAR_FLOAT)
{
if (in_vim9script())
{
rettv->v_type = VAR_BOOL;
val = f == 0.0 ? VVAL_TRUE : VVAL_FALSE;
}
else
f = !f; f = !f;
}
else else
#endif #endif
{ {

View File

@@ -1264,7 +1264,7 @@ eval_list(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int do_error)
had_comma = **arg == ','; had_comma = **arg == ',';
if (had_comma) if (had_comma)
{ {
if (vim9script && !IS_WHITE_OR_NUL((*arg)[1])) if (vim9script && !IS_WHITE_OR_NUL((*arg)[1]) && (*arg)[1] != ']')
{ {
semsg(_(e_white_space_required_after_str), ","); semsg(_(e_white_space_required_after_str), ",");
goto failret; goto failret;

View File

@@ -1332,7 +1332,10 @@ do_source(
// set again. // set again.
ht = &SCRIPT_VARS(sid); ht = &SCRIPT_VARS(sid);
if (is_vim9) if (is_vim9)
{
hashtab_free_contents(ht); hashtab_free_contents(ht);
hash_init(ht);
}
else else
{ {
int todo = (int)ht->ht_used; int todo = (int)ht->ht_used;

View File

@@ -13,6 +13,7 @@ enddef
" test cond ? expr : expr " test cond ? expr : expr
def Test_expr1_trinary() def Test_expr1_trinary()
var lines =<< trim END
assert_equal('one', true ? 'one' : 'two') assert_equal('one', true ? 'one' : 'two')
assert_equal('one', 1 ? assert_equal('one', 1 ?
'one' : 'one' :
@@ -59,6 +60,8 @@ def Test_expr1_trinary()
var Y = FuncTwo var Y = FuncTwo
var Z = g:cond ? FuncOne : FuncTwo var Z = g:cond ? FuncOne : FuncTwo
assert_equal(123, Z(3)) assert_equal(123, Z(3))
END
CheckDefAndScriptSuccess(lines)
enddef enddef
def Test_expr1_trinary_vimscript() def Test_expr1_trinary_vimscript()
@@ -225,7 +228,6 @@ def Test_expr1_falsy()
call CheckDefFailure(["var x = 1??'one' : 'two'"], msg, 1) call CheckDefFailure(["var x = 1??'one' : 'two'"], msg, 1)
enddef enddef
" TODO: define inside test function
def Record(val: any): any def Record(val: any): any
g:vals->add(val) g:vals->add(val)
return val return val
@@ -233,10 +235,14 @@ enddef
" test || " test ||
def Test_expr2() def Test_expr2()
var lines =<< trim END
assert_equal(true, 1 || 0) assert_equal(true, 1 || 0)
assert_equal(true, 0 || assert_equal(true, 0 ||
0 || 0 ||
1) 1)
assert_equal(true, 0 ||
0 ||
!!7)
assert_equal(false, 0 || 0) assert_equal(false, 0 || 0)
assert_equal(false, 0 assert_equal(false, 0
|| 0) || 0)
@@ -250,15 +256,31 @@ def Test_expr2()
assert_equal(true, Record(0) || Record(1)) assert_equal(true, Record(0) || Record(1))
assert_equal([0, 1], g:vals) assert_equal([0, 1], g:vals)
g:vals = []
assert_equal(true, Record(0) || Record(true))
assert_equal([0, true], g:vals)
g:vals = [] g:vals = []
assert_equal(true, Record(0) assert_equal(true, Record(0)
|| Record(1) || Record(1)
|| Record(0)) || Record(0))
assert_equal([0, 1], g:vals) assert_equal([0, 1], g:vals)
g:vals = []
assert_equal(true, Record(0)
|| Record(true)
|| Record(0))
assert_equal([0, true], g:vals)
g:vals = []
assert_equal(true, Record(true) || Record(false))
assert_equal([true], g:vals)
g:vals = [] g:vals = []
assert_equal(false, Record(0) || Record(false) || Record(0)) assert_equal(false, Record(0) || Record(false) || Record(0))
assert_equal([0, false, 0], g:vals) assert_equal([0, false, 0], g:vals)
END
CheckDefAndScriptSuccess(lines)
enddef enddef
def Test_expr2_vimscript() def Test_expr2_vimscript()
@@ -316,37 +338,6 @@ def Test_expr2_vimscript()
var name = v:true|| v:true var name = v:true|| v:true
END END
CheckScriptFailure(lines, 'E1004:', 2) CheckScriptFailure(lines, 'E1004:', 2)
# check evaluating to bool
lines =<< trim END
assert_equal(true, 1 || 0)
assert_equal(true, 0 ||
0 ||
!!7)
assert_equal(false, 0 || 0)
assert_equal(false, 0
|| 0)
assert_equal(false, 0 || false)
g:vals = []
assert_equal(true, Record(true) || Record(false))
assert_equal([true], g:vals)
g:vals = []
assert_equal(true, Record(0) || Record(true))
assert_equal([0, true], g:vals)
g:vals = []
assert_equal(true, Record(0)
|| Record(true)
|| Record(0))
assert_equal([0, true], g:vals)
g:vals = []
assert_equal(false, Record(0) || Record(false) || Record(0))
assert_equal([0, false, 0], g:vals)
END
CheckDefAndScriptSuccess(lines)
enddef enddef
def Test_expr2_fails() def Test_expr2_fails()
@@ -367,6 +358,7 @@ enddef
" test && " test &&
def Test_expr3() def Test_expr3()
var lines =<< trim END
assert_equal(false, 1 && 0) assert_equal(false, 1 && 0)
assert_equal(false, 0 && assert_equal(false, 0 &&
0 && 0 &&
@@ -382,10 +374,18 @@ def Test_expr3()
assert_equal(true, Record(true) && Record(1)) assert_equal(true, Record(true) && Record(1))
assert_equal([true, 1], g:vals) assert_equal([true, 1], g:vals)
g:vals = []
assert_equal(true, Record(1) && Record(true))
assert_equal([1, true], g:vals)
g:vals = [] g:vals = []
assert_equal(false, Record(0) && Record(1)) assert_equal(false, Record(0) && Record(1))
assert_equal([0], g:vals) assert_equal([0], g:vals)
g:vals = []
assert_equal(false, Record(0) && Record(1) && Record(0))
assert_equal([0], g:vals)
g:vals = [] g:vals = []
assert_equal(false, Record(0) && Record(4) && Record(0)) assert_equal(false, Record(0) && Record(4) && Record(0))
assert_equal([0], g:vals) assert_equal([0], g:vals)
@@ -393,10 +393,8 @@ def Test_expr3()
g:vals = [] g:vals = []
assert_equal(false, Record(1) && Record(true) && Record(0)) assert_equal(false, Record(1) && Record(true) && Record(0))
assert_equal([1, true, 0], g:vals) assert_equal([1, true, 0], g:vals)
END
g:vals = [] CheckDefAndScriptSuccess(lines)
assert_equal(false, Record(1) && Record(true) && Record(0))
assert_equal([1, true, 0], g:vals)
enddef enddef
def Test_expr3_vimscript() def Test_expr3_vimscript()
@@ -454,38 +452,6 @@ def Test_expr3_vimscript()
var name = v:true&& v:true var name = v:true&& v:true
END END
CheckScriptFailure(lines, 'E1004:', 2) CheckScriptFailure(lines, 'E1004:', 2)
# check keeping the value
lines =<< trim END
vim9script
assert_equal(false, 1 && 0)
assert_equal(false, 0 &&
0 &&
1)
assert_equal(true, 1
&& true
&& 1)
assert_equal(false, 0 && 0)
assert_equal(false, 0 && false)
assert_equal(false, 1 && 0)
g:vals = []
assert_equal(true, Record(1) && Record(true))
assert_equal([1, true], g:vals)
g:vals = []
assert_equal(false, Record(0) && Record(1))
assert_equal([0], g:vals)
g:vals = []
assert_equal(false, Record(0) && Record(1) && Record(0))
assert_equal([0], g:vals)
g:vals = []
assert_equal(false, Record(1) && Record(true) && Record(0))
assert_equal([1, true, 0], g:vals)
END
CheckScriptSuccess(lines)
enddef enddef
func Test_expr3_fails() func Test_expr3_fails()
@@ -495,6 +461,8 @@ func Test_expr3_fails()
call CheckDefFailure(["var x = 1&& 2"], msg, 1) call CheckDefFailure(["var x = 1&& 2"], msg, 1)
call CheckDefFailure(["if 'yes' && 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 1) call CheckDefFailure(["if 'yes' && 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 1)
call CheckDefExecFailure(['assert_equal(false, Record(1) && Record(4) && Record(0))'], 'E1023: Using a Number as a Bool: 4', 1)
endfunc endfunc
" global variables to use for tests with the "any" type " global variables to use for tests with the "any" type
@@ -515,6 +483,7 @@ let adict = #{aaa: 2, bbb: 8}
" test == comperator " test == comperator
def Test_expr4_equal() def Test_expr4_equal()
var lines =<< trim END
var trueVar = true var trueVar = true
var falseVar = false var falseVar = false
assert_equal(true, true == true) assert_equal(true, true == true)
@@ -568,11 +537,9 @@ def Test_expr4_equal()
set ignorecase set ignorecase
assert_equal(false, 'abc' == 'ABC') assert_equal(false, 'abc' == 'ABC')
assert_equal(false, 'abc' ==# 'ABC') assert_equal(false, 'abc' ==# 'ABC')
assert_equal(true, 'abc' ==? 'ABC')
set noignorecase set noignorecase
CheckDefFailure(["var x = 'a' == xxx"], 'E1001:', 1)
CheckDefExecFailure(['var items: any', 'eval 1', 'eval 2', 'if items == []', 'endif'], 'E691:', 4)
var bb = 0z3f var bb = 0z3f
assert_equal(true, 0z3f == bb) assert_equal(true, 0z3f == bb)
assert_equal(false, bb == 0z4f) assert_equal(false, bb == 0z4f)
@@ -605,10 +572,16 @@ def Test_expr4_equal()
OneFunc = function('len') OneFunc = function('len')
TwoFunc = function('len') TwoFunc = function('len')
assert_equal(true, OneFunc('abc') == TwoFunc('123')) assert_equal(true, OneFunc('abc') == TwoFunc('123'))
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(["var x = 'a' == xxx"], 'E1001:', 1)
CheckDefExecFailure(['var items: any', 'eval 1', 'eval 2', 'if items == []', 'endif'], 'E691:', 4)
enddef enddef
" test != comperator " test != comperator
def Test_expr4_notequal() def Test_expr4_notequal()
var lines =<< trim END
var trueVar = true var trueVar = true
var falseVar = false var falseVar = false
assert_equal(false, true != true) assert_equal(false, true != true)
@@ -657,6 +630,8 @@ def Test_expr4_notequal()
assert_equal(true, 'abc' != 'ABC') assert_equal(true, 'abc' != 'ABC')
set ignorecase set ignorecase
assert_equal(true, 'abc' != 'ABC') assert_equal(true, 'abc' != 'ABC')
assert_equal(true, 'abc' !=# 'ABC')
assert_equal(false, 'abc' !=? 'ABC')
set noignorecase set noignorecase
var bb = 0z3f var bb = 0z3f
@@ -685,10 +660,13 @@ def Test_expr4_notequal()
assert_equal(false, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [123])) assert_equal(false, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [123]))
assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_is', [123])) assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_is', [123]))
assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [999])) assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [999]))
END
CheckDefAndScriptSuccess(lines)
enddef enddef
" test > comperator " test > comperator
def Test_expr4_greater() def Test_expr4_greater()
var lines =<< trim END
assert_true(2 > 0) assert_true(2 > 0)
assert_true(2 > assert_true(2 >
1) 1)
@@ -708,10 +686,13 @@ def Test_expr4_greater()
assert_false(ff > 2.0) assert_false(ff > 2.0)
assert_false(ff > 3.0) assert_false(ff > 3.0)
endif endif
END
CheckDefAndScriptSuccess(lines)
enddef enddef
" test >= comperator " test >= comperator
def Test_expr4_greaterequal() def Test_expr4_greaterequal()
var lines =<< trim END
assert_true(2 >= 0) assert_true(2 >= 0)
assert_true(2 >= assert_true(2 >=
2) 2)
@@ -726,10 +707,13 @@ def Test_expr4_greaterequal()
assert_true(ff >= 2.0) assert_true(ff >= 2.0)
assert_false(ff >= 3.0) assert_false(ff >= 3.0)
endif endif
END
CheckDefAndScriptSuccess(lines)
enddef enddef
" test < comperator " test < comperator
def Test_expr4_smaller() def Test_expr4_smaller()
var lines =<< trim END
assert_false(2 < 0) assert_false(2 < 0)
assert_false(2 < assert_false(2 <
2) 2)
@@ -745,10 +729,13 @@ def Test_expr4_smaller()
assert_false(ff < 2.0) assert_false(ff < 2.0)
assert_true(ff < 3.0) assert_true(ff < 3.0)
endif endif
END
CheckDefAndScriptSuccess(lines)
enddef enddef
" test <= comperator " test <= comperator
def Test_expr4_smallerequal() def Test_expr4_smallerequal()
var lines =<< trim END
assert_false(2 <= 0) assert_false(2 <= 0)
assert_false(2 <= assert_false(2 <=
1) 1)
@@ -767,28 +754,42 @@ def Test_expr4_smallerequal()
assert_true(ff <= 2.0) assert_true(ff <= 2.0)
assert_true(ff <= 3.0) assert_true(ff <= 3.0)
endif endif
END
CheckDefAndScriptSuccess(lines)
enddef enddef
" test =~ comperator " test =~ comperator
def Test_expr4_match() def Test_expr4_match()
var lines =<< trim END
assert_equal(false, '2' =~ '0') assert_equal(false, '2' =~ '0')
assert_equal(false, '' assert_equal(false, ''
=~ '0') =~ '0')
assert_equal(true, '2' =~ assert_equal(true, '2' =~
'[0-9]') '[0-9]')
set ignorecase
assert_equal(false, 'abc' =~ 'ABC')
assert_equal(false, 'abc' =~# 'ABC')
assert_equal(true, 'abc' =~? 'ABC')
set noignorecase
END
CheckDefAndScriptSuccess(lines)
enddef enddef
" test !~ comperator " test !~ comperator
def Test_expr4_nomatch() def Test_expr4_nomatch()
var lines =<< trim END
assert_equal(true, '2' !~ '0') assert_equal(true, '2' !~ '0')
assert_equal(true, '' assert_equal(true, ''
!~ '0') !~ '0')
assert_equal(false, '2' !~ assert_equal(false, '2' !~
'[0-9]') '[0-9]')
END
CheckDefAndScriptSuccess(lines)
enddef enddef
" test is comperator " test is comperator
def Test_expr4_is() def Test_expr4_is()
var lines =<< trim END
var mylist = [2] var mylist = [2]
assert_false(mylist is [2]) assert_false(mylist is [2])
var other = mylist var other = mylist
@@ -800,10 +801,13 @@ def Test_expr4_is()
is 0z1234) is 0z1234)
var otherblob = myblob var otherblob = myblob
assert_true(myblob is otherblob) assert_true(myblob is otherblob)
END
CheckDefAndScriptSuccess(lines)
enddef enddef
" test isnot comperator " test isnot comperator
def Test_expr4_isnot() def Test_expr4_isnot()
var lines =<< trim END
var mylist = [2] var mylist = [2]
assert_true('2' isnot '0') assert_true('2' isnot '0')
assert_true(mylist isnot [2]) assert_true(mylist isnot [2])
@@ -816,6 +820,8 @@ def Test_expr4_isnot()
isnot 0z1234) isnot 0z1234)
var otherblob = myblob var otherblob = myblob
assert_false(myblob isnot otherblob) assert_false(myblob isnot otherblob)
END
CheckDefAndScriptSuccess(lines)
enddef enddef
def RetVoid() def RetVoid()
@@ -896,25 +902,6 @@ def Test_expr4_vim9script()
END END
CheckScriptFailure(lines, 'Cannot use "is" with number', 2) CheckScriptFailure(lines, 'Cannot use "is" with number', 2)
# check 'ignorecase' not being used
lines =<< trim END
vim9script
set ignorecase
assert_equal(false, 'abc' == 'ABC')
assert_equal(false, 'abc' ==# 'ABC')
assert_equal(true, 'abc' ==? 'ABC')
assert_equal(true, 'abc' != 'ABC')
assert_equal(true, 'abc' !=# 'ABC')
assert_equal(false, 'abc' !=? 'ABC')
assert_equal(false, 'abc' =~ 'ABC')
assert_equal(false, 'abc' =~# 'ABC')
assert_equal(true, 'abc' =~? 'ABC')
set noignorecase
END
CheckScriptSuccess(lines)
# check missing white space # check missing white space
lines =<< trim END lines =<< trim END
vim9script vim9script
@@ -1032,6 +1019,7 @@ endfunc
" test addition, subtraction, concatenation " test addition, subtraction, concatenation
def Test_expr5() def Test_expr5()
var lines =<< trim END
assert_equal(66, 60 + 6) assert_equal(66, 60 + 6)
assert_equal(70, 60 + assert_equal(70, 60 +
g:anint) g:anint)
@@ -1081,6 +1069,8 @@ def Test_expr5()
$ENVVAR = 'env' $ENVVAR = 'env'
assert_equal('aenv', 'a' .. $ENVVAR) assert_equal('aenv', 'a' .. $ENVVAR)
END
CheckDefAndScriptSuccess(lines)
enddef enddef
def Test_expr5_vim9script() def Test_expr5_vim9script()
@@ -1196,19 +1186,6 @@ def Test_expr5_vim9script()
END END
CheckScriptFailure(lines, 'E1004:', 2) CheckScriptFailure(lines, 'E1004:', 2)
# check valid string concatenation
lines =<< trim END
vim9script
assert_equal('one123', 'one' .. 123)
assert_equal('onev:true', 'one' .. true)
assert_equal('onev:null', 'one' .. v:null)
assert_equal('onev:none', 'one' .. v:none)
if has('float')
assert_equal('a0.123', 'a' .. 0.123)
endif
END
CheckScriptSuccess(lines)
# check invalid string concatenation # check invalid string concatenation
lines =<< trim END lines =<< trim END
vim9script vim9script
@@ -1258,6 +1235,7 @@ def Test_expr5_float()
if !has('float') if !has('float')
MissingFeature 'float' MissingFeature 'float'
else else
var lines =<< trim END
assert_equal(66.0, 60.0 + 6.0) assert_equal(66.0, 60.0 + 6.0)
assert_equal(66.0, 60.0 + 6) assert_equal(66.0, 60.0 + 6)
assert_equal(66.0, 60 + assert_equal(66.0, 60 +
@@ -1276,6 +1254,8 @@ def Test_expr5_float()
assert_equal(7.9, 8 - g:afloat) assert_equal(7.9, 8 - g:afloat)
assert_equal(9.9, g:anint - g:afloat) assert_equal(9.9, g:anint - g:afloat)
assert_equal(-9.9, g:afloat - g:anint) assert_equal(-9.9, g:afloat - g:anint)
END
CheckDefAndScriptSuccess(lines)
endif endif
enddef enddef
@@ -1319,6 +1299,7 @@ endfunc
" test multiply, divide, modulo " test multiply, divide, modulo
def Test_expr6() def Test_expr6()
var lines =<< trim END
assert_equal(36, 6 * 6) assert_equal(36, 6 * 6)
assert_equal(24, 6 * assert_equal(24, 6 *
g:thefour) g:thefour)
@@ -1354,6 +1335,8 @@ def Test_expr6()
assert_equal(6.0, xf[0] assert_equal(6.0, xf[0]
* yf[0]) * yf[0])
endif endif
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(["var x = 6 * xxx"], 'E1001:', 1) CheckDefFailure(["var x = 6 * xxx"], 'E1001:', 1)
enddef enddef
@@ -1419,6 +1402,7 @@ def Test_expr6_float()
if !has('float') if !has('float')
MissingFeature 'float' MissingFeature 'float'
else else
var lines =<< trim END
assert_equal(36.0, 6.0 * 6) assert_equal(36.0, 6.0 * 6)
assert_equal(36.0, 6 * assert_equal(36.0, 6 *
6.0) 6.0)
@@ -1442,6 +1426,8 @@ def Test_expr6_float()
assert_equal(4.0, 6.0 * 4.0 / 6.0) assert_equal(4.0, 6.0 * 4.0 / 6.0)
assert_equal(4.0, 6.0 * 4.0 / 6.0) assert_equal(4.0, 6.0 * 4.0 / 6.0)
END
CheckDefAndScriptSuccess(lines)
endif endif
enddef enddef
@@ -1531,12 +1517,15 @@ enddef
" test low level expression " test low level expression
def Test_expr7_number() def Test_expr7_number()
# number constant # number constant
var lines =<< trim END
assert_equal(0, 0) assert_equal(0, 0)
assert_equal(654, 0654) assert_equal(654, 0654)
assert_equal(6, 0x6) assert_equal(6, 0x6)
assert_equal(15, 0xf) assert_equal(15, 0xf)
assert_equal(255, 0xff) assert_equal(255, 0xff)
END
CheckDefAndScriptSuccess(lines)
enddef enddef
def Test_expr7_float() def Test_expr7_float()
@@ -1544,24 +1533,31 @@ def Test_expr7_float()
if !has('float') if !has('float')
MissingFeature 'float' MissingFeature 'float'
else else
var lines =<< trim END
assert_equal(g:float_zero, .0) assert_equal(g:float_zero, .0)
assert_equal(g:float_zero, 0.0) assert_equal(g:float_zero, 0.0)
assert_equal(g:float_neg, -9.8) assert_equal(g:float_neg, -9.8)
assert_equal(g:float_big, 9.9e99) assert_equal(g:float_big, 9.9e99)
END
CheckDefAndScriptSuccess(lines)
endif endif
enddef enddef
def Test_expr7_blob() def Test_expr7_blob()
# blob constant # blob constant
var lines =<< trim END
assert_equal(g:blob_empty, 0z) assert_equal(g:blob_empty, 0z)
assert_equal(g:blob_one, 0z01) assert_equal(g:blob_one, 0z01)
assert_equal(g:blob_long, 0z0102.0304) assert_equal(g:blob_long, 0z0102.0304)
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(["var x = 0z123"], 'E973:', 1) CheckDefFailure(["var x = 0z123"], 'E973:', 1)
enddef enddef
def Test_expr7_string() def Test_expr7_string()
# string constant # string constant
var lines =<< trim END
assert_equal(g:string_empty, '') assert_equal(g:string_empty, '')
assert_equal(g:string_empty, "") assert_equal(g:string_empty, "")
assert_equal(g:string_short, 'x') assert_equal(g:string_short, 'x')
@@ -1569,6 +1565,8 @@ def Test_expr7_string()
assert_equal(g:string_long, 'abcdefghijklm') assert_equal(g:string_long, 'abcdefghijklm')
assert_equal(g:string_long, "abcdefghijklm") assert_equal(g:string_long, "abcdefghijklm")
assert_equal(g:string_special, "ab\ncd\ref\ekk") assert_equal(g:string_special, "ab\ncd\ref\ekk")
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(['var x = "abc'], 'E114:', 1) CheckDefFailure(['var x = "abc'], 'E114:', 1)
CheckDefFailure(["var x = 'abc"], 'E115:', 1) CheckDefFailure(["var x = 'abc"], 'E115:', 1)
@@ -1587,10 +1585,13 @@ enddef
def Test_expr7_special() def Test_expr7_special()
# special constant # special constant
var lines =<< trim END
assert_equal(g:special_true, true) assert_equal(g:special_true, true)
assert_equal(g:special_false, false) assert_equal(g:special_false, false)
assert_equal(g:special_true, v:true) assert_equal(g:special_true, v:true)
assert_equal(g:special_false, v:false) assert_equal(g:special_false, v:false)
assert_equal(v:true, true)
assert_equal(v:false, false)
assert_equal(true, !false) assert_equal(true, !false)
assert_equal(false, !true) assert_equal(false, !true)
@@ -1601,8 +1602,15 @@ def Test_expr7_special()
assert_equal(false, !!0) assert_equal(false, !!0)
assert_equal(true, !!1) assert_equal(true, !!1)
var t = true
var f = false
assert_equal(true, t)
assert_equal(false, f)
assert_equal(g:special_null, v:null) assert_equal(g:special_null, v:null)
assert_equal(g:special_none, v:none) assert_equal(g:special_none, v:none)
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(['v:true = true'], 'E46:', 1) CheckDefFailure(['v:true = true'], 'E46:', 1)
CheckDefFailure(['v:true = false'], 'E46:', 1) CheckDefFailure(['v:true = false'], 'E46:', 1)
@@ -1611,29 +1619,9 @@ def Test_expr7_special()
CheckDefFailure(['v:none = 22'], 'E46:', 1) CheckDefFailure(['v:none = 22'], 'E46:', 1)
enddef enddef
def Test_expr7_special_vim9script()
var lines =<< trim END
vim9script
var t = true
var f = false
assert_equal(v:true, true)
assert_equal(true, t)
assert_equal(v:false, false)
assert_equal(false, f)
assert_equal(true, !false)
assert_equal(false, !true)
assert_equal(true, !0)
assert_equal(false, !1)
assert_equal(false, !!false)
assert_equal(true, !!true)
assert_equal(false, !!0)
assert_equal(true, !!1)
END
CheckScriptSuccess(lines)
enddef
def Test_expr7_list() def Test_expr7_list()
# list # list
var lines =<< trim END
assert_equal(g:list_empty, []) assert_equal(g:list_empty, [])
assert_equal(g:list_empty, [ ]) assert_equal(g:list_empty, [ ])
@@ -1656,6 +1644,8 @@ def Test_expr7_list()
var llstring: list<list<string>> = [['text'], []] var llstring: list<list<string>> = [['text'], []]
llstring = [[], ['text']] llstring = [[], ['text']]
llstring = [[], []] llstring = [[], []]
END
CheckDefAndScriptSuccess(lines)
var rangelist: list<number> = range(3) var rangelist: list<number> = range(3)
g:rangelist = range(3) g:rangelist = range(3)
@@ -1680,7 +1670,7 @@ def Test_expr7_list()
CheckDefExecFailure(["var l: list<string> = [234, 'x']"], 'E1012:', 1) CheckDefExecFailure(["var l: list<string> = [234, 'x']"], 'E1012:', 1)
CheckDefExecFailure(["var l: list<string> = ['x', 123]"], 'E1012:', 1) CheckDefExecFailure(["var l: list<string> = ['x', 123]"], 'E1012:', 1)
var lines =<< trim END lines =<< trim END
vim9script vim9script
var datalist: list<string> var datalist: list<string>
def Main() def Main()
@@ -1788,6 +1778,7 @@ def LambdaUsingArg(x: number): func
enddef enddef
def Test_expr7_lambda() def Test_expr7_lambda()
var lines =<< trim END
var La = { -> 'result'} var La = { -> 'result'}
assert_equal('result', La()) assert_equal('result', La())
assert_equal([1, 3, 5], [1, 2, 3]->map({key, val -> key + val})) assert_equal([1, 3, 5], [1, 2, 3]->map({key, val -> key + val}))
@@ -1827,6 +1818,8 @@ def Test_expr7_lambda()
assert_equal(false, LambdaUsingArg(0)()) assert_equal(false, LambdaUsingArg(0)())
assert_equal(true, LambdaUsingArg(1)()) assert_equal(true, LambdaUsingArg(1)())
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1) CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1)
# error is in first line of the lambda # error is in first line of the lambda
@@ -1882,6 +1875,7 @@ enddef
def Test_expr7_dict() def Test_expr7_dict()
# dictionary # dictionary
var lines =<< trim END
assert_equal(g:dict_empty, {}) assert_equal(g:dict_empty, {})
assert_equal(g:dict_empty, { }) assert_equal(g:dict_empty, { })
assert_equal(g:dict_one, {'one': 1}) assert_equal(g:dict_one, {'one': 1})
@@ -1911,6 +1905,8 @@ def Test_expr7_dict()
dictdict = #{one: #{}, two: #{}} dictdict = #{one: #{}, two: #{}}
assert_equal({'': 0}, {matchstr('string', 'wont match'): 0}) assert_equal({'': 0}, {matchstr('string', 'wont match'): 0})
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(["var x = #{a:8}"], 'E1069:', 1) CheckDefFailure(["var x = #{a:8}"], 'E1069:', 1)
CheckDefFailure(["var x = #{a : 8}"], 'E1068:', 1) CheckDefFailure(["var x = #{a : 8}"], 'E1068:', 1)
@@ -2311,11 +2307,15 @@ def s:Echo4Arg(arg: any): string
enddef enddef
def Test_expr7_call() def Test_expr7_call()
var lines =<< trim END
assert_equal('yes', 'yes'->Echo()) assert_equal('yes', 'yes'->Echo())
assert_equal('yes', 'yes'
->s:Echo4Arg())
assert_equal(true, !range(5)->empty()) assert_equal(true, !range(5)->empty())
assert_equal([0, 1, 2], --3->range()) assert_equal([0, 1, 2], --3->range())
END
CheckDefAndScriptSuccess(lines)
assert_equal('yes', 'yes'
->s:Echo4Arg())
CheckDefFailure(["var x = 'yes'->Echo"], 'E107:', 1) CheckDefFailure(["var x = 'yes'->Echo"], 'E107:', 1)
CheckScriptFailure([ CheckScriptFailure([

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1980,
/**/ /**/
1979, 1979,
/**/ /**/