diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/eval.c | 1 | ||||
| -rw-r--r-- | src/nvim/eval/typval.c | 8 | ||||
| -rw-r--r-- | src/nvim/testdir/test_blob.vim | 1 | ||||
| -rw-r--r-- | src/nvim/testdir/test_expr.vim | 7 | ||||
| -rw-r--r-- | src/nvim/testdir/test_filter_map.vim | 1 | ||||
| -rw-r--r-- | src/nvim/testdir/test_let.vim | 3 | ||||
| -rw-r--r-- | src/nvim/testdir/test_listdict.vim | 47 | ||||
| -rw-r--r-- | src/nvim/testdir/test_unlet.vim | 1 | ||||
| -rw-r--r-- | src/nvim/testdir/test_usercommands.vim | 10 | ||||
| -rw-r--r-- | src/nvim/testdir/test_vimscript.vim | 17 | 
10 files changed, 72 insertions, 24 deletions
| diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 69bc26b82e..ffbe66aa25 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -1449,6 +1449,7 @@ char *get_lval(char *const name, typval_T *const rettv, lval_T *const lp, const            key[len] = prevval;          }          if (wrong) { +          tv_clear(&var1);            return NULL;          }        } diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index a6a8c16a3b..3b513bfafb 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -2490,10 +2490,14 @@ bool tv_dict_equal(dict_T *const d1, dict_T *const d2, const bool ic, const bool    if (d1 == d2) {      return true;    } -  if (d1 == NULL || d2 == NULL) { +  if (tv_dict_len(d1) != tv_dict_len(d2)) {      return false;    } -  if (tv_dict_len(d1) != tv_dict_len(d2)) { +  if (tv_dict_len(d1) == 0) { +    // empty and NULL dicts are considered equal +    return true; +  } +  if (d1 == NULL || d2 == NULL) {      return false;    } diff --git a/src/nvim/testdir/test_blob.vim b/src/nvim/testdir/test_blob.vim index f2b32c06d4..c5a217f36f 100644 --- a/src/nvim/testdir/test_blob.vim +++ b/src/nvim/testdir/test_blob.vim @@ -209,6 +209,7 @@ func Test_blob_add()    call assert_equal(0z001122, b)    call add(b, '51')    call assert_equal(0z00112233, b) +  call assert_equal(1, add(v:_null_blob, 0x22))    call assert_fails('call add(b, [9])', 'E745:')    call assert_fails('call add("", 0x01)', 'E897:') diff --git a/src/nvim/testdir/test_expr.vim b/src/nvim/testdir/test_expr.vim index f6e6004a31..66660ab75e 100644 --- a/src/nvim/testdir/test_expr.vim +++ b/src/nvim/testdir/test_expr.vim @@ -99,13 +99,6 @@ func Test_loop_over_null_list()    endfor  endfunc -func Test_compare_null_dict() -  call assert_fails('let x = v:_null_dict[10]') -  call assert_equal({}, {}) -  call assert_equal(v:_null_dict, v:_null_dict) -  call assert_notequal({}, v:_null_dict) -endfunc -  func Test_set_reg_null_list()    call setreg('x', v:_null_list)  endfunc diff --git a/src/nvim/testdir/test_filter_map.vim b/src/nvim/testdir/test_filter_map.vim index 54f6e269e0..ebcb6699c6 100644 --- a/src/nvim/testdir/test_filter_map.vim +++ b/src/nvim/testdir/test_filter_map.vim @@ -88,6 +88,7 @@ func Test_map_filter_fails()    call assert_fails("let l = filter('abc', '\"> \" . v:val')", 'E896:')    call assert_fails("let l = filter([1, 2, 3], '{}')", 'E728:')    call assert_fails("let l = filter({'k' : 10}, '{}')", 'E728:') +  call assert_fails("let l = filter([1, 2], {})", 'E731:')    call assert_equal(0, map(v:_null_list, '"> " .. v:val'))    call assert_equal(0, map(v:_null_dict, '"> " .. v:val'))  endfunc diff --git a/src/nvim/testdir/test_let.vim b/src/nvim/testdir/test_let.vim index 89cf4b5498..937076aa2a 100644 --- a/src/nvim/testdir/test_let.vim +++ b/src/nvim/testdir/test_let.vim @@ -275,6 +275,7 @@ func Test_let_errors()    call assert_fails('let &buftype[1] = "nofile"', 'E18:')    let s = "var"    let var = 1 +  call assert_fails('let var += [1,2]', 'E734:')    call assert_fails('let {s}.1 = 2', 'E18:')    call assert_fails('let a[1] = 5', 'E121:')    let l = [[1,2]] @@ -287,6 +288,8 @@ func Test_let_errors()    call assert_fails('let l[0:1] = [1, 2, 3]', 'E710:')    call assert_fails('let l[-2:-3] = [3, 4]', 'E684:')    call assert_fails('let l[0:4] = [5, 6]', 'E711:') +  call assert_fails('let g:["a;b"] = 10', 'E461:') +  call assert_fails('let g:.min = function("max")', 'E704:')    " This test works only when the language is English    if v:lang == "C" || v:lang =~ '^[Ee]n' diff --git a/src/nvim/testdir/test_listdict.vim b/src/nvim/testdir/test_listdict.vim index d92563a451..f7261b2055 100644 --- a/src/nvim/testdir/test_listdict.vim +++ b/src/nvim/testdir/test_listdict.vim @@ -32,7 +32,11 @@ func Test_list_slice()    call assert_equal([1, 'as''d', [1, 2, function('strlen')], {'a': 1}], l[0:8])    call assert_equal([], l[8:-1])    call assert_equal([], l[0:-10]) -  call assert_equal([], v:_null_list[:2]) +  " perform an operation on a list slice +  let l = [1, 2, 3] +  let l[:1] += [1, 2] +  let l[2:] -= [1] +  call assert_equal([2, 4, 2], l)  endfunc  " List identity @@ -147,6 +151,20 @@ func Test_list_func_remove()    call assert_fails("call remove(l, l)", 'E745:')  endfunc +" List add() function +func Test_list_add() +  let l = [] +  call add(l, 1) +  call add(l, [2, 3]) +  call add(l, []) +  call add(l, v:_null_list) +  call add(l, {'k' : 3}) +  call add(l, {}) +  call add(l, v:_null_dict) +  call assert_equal([1, [2, 3], [], [], {'k' : 3}, {}, {}], l) +  " call assert_equal(1, add(v:_null_list, 4)) +endfunc +  " Tests for Dictionary type  func Test_dict() @@ -660,8 +678,6 @@ func Test_reverse_sort_uniq()    call assert_fails("call sort([1, 2], function('min'), 1)", "E715:")    call assert_fails("call sort([1, 2], function('invalid_func'))", "E700:")    call assert_fails("call sort([1, 2], function('min'))", "E702:") -  call assert_equal(0, sort(v:_null_list)) -  call assert_equal(0, uniq(v:_null_list))  endfunc  " reduce a list or a blob @@ -709,7 +725,7 @@ func Test_reduce()    call assert_equal(42, reduce(v:_null_blob, function('add'), 42))  endfunc -" splitting a string to a List +" splitting a string to a List using split()  func Test_str_split()    call assert_equal(['aa', 'bb'], split('  aa  bb '))    call assert_equal(['aa', 'bb'], split('  aa  bb  ', '\W\+', 0)) @@ -964,6 +980,11 @@ func Test_listdict_index()    call assert_fails("let l = insert([1,2,3], 4, 10)", 'E684:')    call assert_fails("let l = insert([1,2,3], 4, -10)", 'E684:')    call assert_fails("let l = insert([1,2,3], 4, [])", 'E745:') +  let l = [1, 2, 3] +  call assert_fails("let l[i] = 3", 'E121:') +  call assert_fails("let l[1.1] = 4", 'E806:') +  call assert_fails("let l[:i] = [4, 5]", 'E121:') +  call assert_fails("let l[:3.2] = [4, 5]", 'E806:')  endfunc  " Test for a null list @@ -1005,12 +1026,18 @@ endfunc  " Test for a null dict  func Test_null_dict() -  call assert_equal(0, items(v:_null_dict)) -  call assert_equal(0, keys(v:_null_dict)) -  call assert_equal(0, values(v:_null_dict)) -  call assert_false(has_key(v:_null_dict, 'k')) -  call assert_fails("let l = [] + v:_null_list", 'E15:') -  call assert_fails("let l = v:_null_list + []", 'E15:') +  call assert_equal(v:_null_dict, v:_null_dict) +  let d = v:_null_dict +  call assert_equal({}, d) +  call assert_equal(0, len(d)) +  call assert_equal(1, empty(d)) +  call assert_equal(0, items(d)) +  call assert_equal(0, keys(d)) +  call assert_equal(0, values(d)) +  call assert_false(has_key(d, 'k')) +  call assert_equal('{}', string(d)) +  call assert_fails('let x = v:_null_dict[10]') +  call assert_equal({}, {})  endfunc  " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_unlet.vim b/src/nvim/testdir/test_unlet.vim index acf98bb1fc..4779d17906 100644 --- a/src/nvim/testdir/test_unlet.vim +++ b/src/nvim/testdir/test_unlet.vim @@ -27,6 +27,7 @@ func Test_unlet_fails()    call assert_fails("unlet l['k'", 'E111:')    let d = {'k' : 1}    call assert_fails("unlet d.k2", 'E716:') +  call assert_fails("unlet {a};", 'E488:')  endfunc  func Test_unlet_env() diff --git a/src/nvim/testdir/test_usercommands.vim b/src/nvim/testdir/test_usercommands.vim index a3070d6517..5b8b384bae 100644 --- a/src/nvim/testdir/test_usercommands.vim +++ b/src/nvim/testdir/test_usercommands.vim @@ -623,17 +623,17 @@ func Test_usercmd_custom()      return "a\nb\n"    endfunc    command -nargs=* -complete=customlist,T1 TCmd1 -  call feedkeys(":T1 \<C-A>\<C-B>\"\<CR>", 'xt') -  call assert_equal('"T1 ', @:) +  call feedkeys(":TCmd1 \<C-A>\<C-B>\"\<CR>", 'xt') +  call assert_equal('"TCmd1 ', @:)    delcommand TCmd1    delfunc T1    func T2(a, c, p) -    return ['a', 'b', 'c'] +    return {}    endfunc    command -nargs=* -complete=customlist,T2 TCmd2 -  call feedkeys(":T2 \<C-A>\<C-B>\"\<CR>", 'xt') -  call assert_equal('"T2 ', @:) +  call feedkeys(":TCmd2 \<C-A>\<C-B>\"\<CR>", 'xt') +  call assert_equal('"TCmd2 ', @:)    delcommand TCmd2    delfunc T2  endfunc diff --git a/src/nvim/testdir/test_vimscript.vim b/src/nvim/testdir/test_vimscript.vim index 3d3f0a8839..a9fd7a4bef 100644 --- a/src/nvim/testdir/test_vimscript.vim +++ b/src/nvim/testdir/test_vimscript.vim @@ -1658,6 +1658,20 @@ func Test_compound_assignment_operators()        call assert_fails('let x .= "f"', 'E734')        let x = !3.14        call assert_equal(0.0, x) + +      " integer and float operations +      let x = 1 +      let x *= 2.1 +      call assert_equal(2.1, x) +      let x = 1 +      let x /= 0.25 +      call assert_equal(4.0, x) +      let x = 1 +      call assert_fails('let x %= 0.25', 'E734:') +      let x = 1 +      call assert_fails('let x .= 0.25', 'E734:') +      let x = 1.0 +      call assert_fails('let x += [1.1]', 'E734:')      endif      " Test for environment variable @@ -1839,6 +1853,9 @@ func Test_missing_end()    " Missing 'in' in a :for statement    call assert_fails('for i range(1) | endfor', 'E690:') + +  " Incorrect number of variables in for +  call assert_fails('for [i,] in range(3) | endfor', 'E475:')  endfunc  " Test for deep nesting of if/for/while/try statements              {{{1 | 
