diff options
-rw-r--r-- | src/testdir/test_blob.vim | 3 | ||||
-rw-r--r-- | src/testdir/test_cursor_func.vim | 2 | ||||
-rw-r--r-- | src/testdir/test_eval.in | 92 | ||||
-rw-r--r-- | src/testdir/test_eval.ok | bin | 7988 -> 6716 bytes | |||
-rw-r--r-- | src/testdir/test_eval_func.vim | 10 | ||||
-rw-r--r-- | src/testdir/test_eval_stuff.vim | 12 | ||||
-rw-r--r-- | src/testdir/test_expr.vim | 1 | ||||
-rw-r--r-- | src/testdir/test_filter_map.vim | 10 | ||||
-rw-r--r-- | src/testdir/test_functions.vim | 19 | ||||
-rw-r--r-- | src/testdir/test_listdict.vim | 44 | ||||
-rw-r--r-- | src/testdir/test_sort.vim | 2 | ||||
-rw-r--r-- | src/testdir/test_syntax.vim | 4 | ||||
-rw-r--r-- | src/testdir/test_utf8.vim | 3 | ||||
-rw-r--r-- | src/testdir/test_vimscript.vim | 80 | ||||
-rw-r--r-- | src/version.c | 2 |
15 files changed, 178 insertions, 106 deletions
diff --git a/src/testdir/test_blob.vim b/src/testdir/test_blob.vim index 0170f547fa..e2c332a8a6 100644 --- a/src/testdir/test_blob.vim +++ b/src/testdir/test_blob.vim @@ -307,6 +307,9 @@ func Test_blob_insert() call assert_fails('call insert(b, -1)', 'E475:') call assert_fails('call insert(b, 257)', 'E475:') call assert_fails('call insert(b, 0, [9])', 'E745:') + call assert_fails('call insert(b, 0, -20)', 'E475:') + call assert_fails('call insert(b, 0, 20)', 'E475:') + call assert_fails('call insert(b, [])', 'E745:') endfunc func Test_blob_reverse() diff --git a/src/testdir/test_cursor_func.vim b/src/testdir/test_cursor_func.vim index 0afc45e588..7a17958335 100644 --- a/src/testdir/test_cursor_func.vim +++ b/src/testdir/test_cursor_func.vim @@ -115,3 +115,5 @@ func Test_screenpos_number() close bwipe! endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_eval.in b/src/testdir/test_eval.in index e1f4f6de9f..ebe1874102 100644 --- a/src/testdir/test_eval.in +++ b/src/testdir/test_eval.in @@ -27,14 +27,6 @@ endfun execute "silent normal! Go==\n==\e\"".a:1."P" endif endfun -:fun ErrExe(str) - call append('$', 'Executing '.a:str) - try - execute a:str - catch - $put =v:exception - endtry -endfun :fun Test() $put ='{{{1 Appending NL with setreg()' call setreg('a', 'abcA2', 'c') @@ -109,103 +101,19 @@ else call AppendRegParts('*', 'V', "clipboard contents\n", "['clipboard contents']", "clipboard contents\n", "['clipboard contents']") call AppendRegParts('*', 'V', "something else\n", "['something else']", "something else\n", "['something else']") endif -$put ='{{{1 Errors' -call ErrExe('call setreg()') -call ErrExe('call setreg(1)') -call ErrExe('call setreg(1, 2, 3, 4)') -call ErrExe('call setreg([], 2)') -call ErrExe('call setreg(1, {})') -call ErrExe('call setreg(1, 2, [])') -call ErrExe('call setreg("/", ["1", "2"])') -call ErrExe('call setreg("=", ["1", "2"])') -call ErrExe('call setreg(1, ["", "", [], ""])') endfun :" :call Test() :" :delfunction SetReg :delfunction AppendRegContents -:delfunction ErrExe :delfunction Test :delcommand AR :call garbagecollect(1) :" -:" function name not starting with capital -:try -:func! g:test() -:echo "test" -:endfunc -:catch -:$put =v:exception -:endtry -:" -:" function name includes a colon -:try -:func! b:test() -:echo "test" -:endfunc -:catch -:$put =v:exception -:endtry -:" -:" function name folowed by # -:try -:func! test2() "# -:echo "test2" -:endfunc -:catch -:$put =v:exception -:endtry -:" -:" function name starting with/without "g:", buffer-local funcref. -:function! g:Foo(n) -: $put ='called Foo(' . a:n . ')' -:endfunction -:let b:my_func = function('Foo') -:call b:my_func(1) -:echo g:Foo(2) -:echo Foo(3) -:" -:" script-local function used in Funcref must exist. -:so test_eval_func.vim -:" -:" Using $ instead of '$' must give an error -:try -: call append($, 'foobar') -:catch -:$put =v:exception -:endtry -:" -:$put ='{{{1 getcurpos/setpos' -/^012345678 -6l:let sp = getcurpos() -0:call setpos('.', sp) -jyl:$put -:" -:" substring and variable name -:let str = 'abcdef' -:let n = 3 -:$put =str[n:] -:$put =str[:n] -:$put =str[n:n] -:unlet n -:let nn = 3 -:$put =str[nn:] -:$put =str[:nn] -:$put =str[nn:nn] -:unlet nn -:let b:nn = 4 -:$put =str[b:nn:] -:$put =str[:b:nn] -:$put =str[b:nn:b:nn] -:unlet b:nn -:" :/^start:/+1,$wq! test.out :" vim: et ts=4 isk-=\: fmr=???,??? :call getchar() ENDTEST -012345678 -012345678 - start: diff --git a/src/testdir/test_eval.ok b/src/testdir/test_eval.ok Binary files differindex cb7c85e254..3ae6f6c671 100644 --- a/src/testdir/test_eval.ok +++ b/src/testdir/test_eval.ok diff --git a/src/testdir/test_eval_func.vim b/src/testdir/test_eval_func.vim deleted file mode 100644 index 09d2f62d9c..0000000000 --- a/src/testdir/test_eval_func.vim +++ /dev/null @@ -1,10 +0,0 @@ -" Vim script used in test_eval.in. Needed for script-local function. - -func s:Testje() - return "foo" -endfunc -let Bar = function('s:Testje') -$put ='s:Testje exists: ' . exists('s:Testje') -$put ='func s:Testje exists: ' . exists('*s:Testje') -$put ='Bar exists: ' . exists('Bar') -$put ='func Bar exists: ' . exists('*Bar') diff --git a/src/testdir/test_eval_stuff.vim b/src/testdir/test_eval_stuff.vim index 551370bcbd..8feeb36738 100644 --- a/src/testdir/test_eval_stuff.vim +++ b/src/testdir/test_eval_stuff.vim @@ -349,7 +349,17 @@ func Test_setreg_basic() call setreg('I', 'abcI') call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']") call Assert_regput('I', ['==', '=abcI=']) -endfunc + " Error cases + call assert_fails('call setreg()', 'E119:') + call assert_fails('call setreg(1)', 'E119:') + call assert_fails('call setreg(1, 2, 3, 4)', 'E118:') + call assert_fails('call setreg([], 2)', 'E730:') + call assert_fails('call setreg(1, {})', 'E731:') + call assert_fails('call setreg(1, 2, [])', 'E730:') + call assert_fails('call setreg("/", ["1", "2"])', 'E883:') + call assert_fails('call setreg("=", ["1", "2"])', 'E883:') + call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:') +endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim index 39e719a9bf..11cd7aa524 100644 --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -44,6 +44,7 @@ func Test_dict() call assert_equal('zero', d[0]) call assert_true(has_key(d, '')) call assert_true(has_key(d, 'a')) + call assert_fails("let i = has_key([], 'a')", 'E715:') let d[''] = 'none' let d['a'] = 'aaa' diff --git a/src/testdir/test_filter_map.vim b/src/testdir/test_filter_map.vim index 577e0ce0bd..63102cd9d4 100644 --- a/src/testdir/test_filter_map.vim +++ b/src/testdir/test_filter_map.vim @@ -89,9 +89,15 @@ func Test_filter_map_dict_expr_funcref() call assert_equal({"foo": "f", "bar": "b", "baz": "b"}, map(copy(dict), function('s:filter4'))) endfunc -func Test_map_fails() +func Test_map_filter_fails() call assert_fails('call map([1], "42 +")', 'E15:') call assert_fails('call filter([1], "42 +")', 'E15:') + call assert_fails("let l = map('abc', '\"> \" . v:val')", 'E712:') + call assert_fails("let l = filter('abc', '\"> \" . v:val')", 'E712:') + call assert_fails("let l = filter([1, 2, 3], '{}')", 'E728:') + call assert_fails("let l = filter({'k' : 10}, '{}')", 'E728:') + call assert_equal(0, map(test_null_list(), '"> " .. v:val')) + call assert_equal(0, map(test_null_dict(), '"> " .. v:val')) endfunc func Test_map_and_modify() @@ -103,3 +109,5 @@ func Test_map_and_modify() call assert_fails('call map(d, "remove(d, v:key)[0]")', 'E741:') call assert_fails('echo map(d, {k,v -> remove(d, k)})', 'E741:') endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index 3b9e34c191..f7a438af72 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -99,9 +99,11 @@ func Test_len() call assert_equal(2, len('ab')) call assert_equal(0, len([])) + call assert_equal(0, len(test_null_list())) call assert_equal(2, len([2, 1])) call assert_equal(0, len({})) + call assert_equal(0, len(test_null_dict())) call assert_equal(2, len({'a': 1, 'b': 2})) call assert_fails('call len(v:none)', 'E701:') @@ -799,6 +801,9 @@ func Test_append() split only undo + + " Using $ instead of '$' must give an error + call assert_fails("call append($, 'foobar')", 'E116:') endfunc func Test_getbufvar() @@ -2043,6 +2048,7 @@ func Test_range() " list2str() call assert_equal('ABC', list2str(range(65, 67))) + call assert_fails('let s = list2str(5)', 'E474:') " lock() let thelist = range(5) @@ -2216,4 +2222,17 @@ func Test_screen_functions() call assert_equal([], screenchars(-1, -1)) endfunc +" Test for getcurpos() and setpos() +func Test_getcurpos_setpos() + new + call setline(1, ['012345678', '012345678']) + normal gg6l + let sp = getcurpos() + normal 0 + call setpos('.', sp) + normal jyl + call assert_equal('6', @") + close! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_listdict.vim b/src/testdir/test_listdict.vim index 9db103545b..c6d6885ec4 100644 --- a/src/testdir/test_listdict.vim +++ b/src/testdir/test_listdict.vim @@ -32,6 +32,7 @@ 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([], test_null_list()[:2]) endfunc " List identity @@ -168,6 +169,19 @@ func Test_dict() call assert_equal({'c': 'ccc', '1': 99, 'b': [1, 2, function('strlen')], '3': 33, '-1': {'a': 1}}, d) call filter(d, 'v:key =~ ''[ac391]''') call assert_equal({'c': 'ccc', '1': 99, '3': 33, '-1': {'a': 1}}, d) + + " duplicate key + call assert_fails("let d = {'k' : 10, 'k' : 20}", 'E721:') + " missing comma + call assert_fails("let d = {'k' : 10 'k' : 20}", 'E722:') + " missing curly brace + call assert_fails("let d = {'k' : 10,", 'E723:') + " invalid key + call assert_fails('let d = #{++ : 10}', 'E15:') + " wrong type for key + call assert_fails('let d={[] : 10}', 'E730:') + " undefined variable as value + call assert_fails("let d={'k' : i}", 'E121:') endfunc " Dictionary identity @@ -262,7 +276,7 @@ func Test_script_local_dict_func() unlet g:dict endfunc -" Test removing items in la dictionary +" Test removing items in a dictionary func Test_dict_func_remove() let d = {1:'a', 2:'b', 3:'c'} call assert_equal('b', remove(d, 2)) @@ -634,6 +648,11 @@ func Test_reverse_sort_uniq() call assert_fails('call reverse("")', 'E899:') call assert_fails('call uniq([1, 2], {x, y -> []})', 'E882:') + 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(test_null_list())) + call assert_equal(0, uniq(test_null_list())) endfunc " splitting a string to a List using split() @@ -748,6 +767,9 @@ func Test_listdict_extend() call assert_fails("call extend([1, 2], 1)", 'E712:') call assert_fails("call extend([1, 2], {})", 'E712:') + + " Extend g: dictionary with an invalid variable name + call assert_fails("call extend(g:, {'-!' : 10})", 'E461:') endfunc func s:check_scope_dict(x, fixed) @@ -871,6 +893,26 @@ func Test_listdict_index() call assert_fails("let v = range(5)[2:[]]", 'E730:') call assert_fails("let v = range(5)[2:{-> 2}(]", 'E116:') call assert_fails("let v = range(5)[2:3", 'E111:') + 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:') +endfunc + +" Test for a null list +func Test_null_list() + call assert_equal(0, join(test_null_list())) + call assert_fails('let s = join([1, 2], [])', 'E730:') + call assert_equal([], split(test_null_string())) +endfunc + +" Test for a null dict +func Test_null_dict() + call assert_equal(0, items(test_null_dict())) + call assert_equal(0, keys(test_null_dict())) + call assert_equal(0, values(test_null_dict())) + call assert_false(has_key(test_null_dict(), 'k')) + call assert_fails("let l = [] + test_null_list()", 'E15:') + call assert_fails("let l = test_null_list() + []", 'E15:') endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_sort.vim b/src/testdir/test_sort.vim index 8299db4ef8..92e8f49d48 100644 --- a/src/testdir/test_sort.vim +++ b/src/testdir/test_sort.vim @@ -47,7 +47,7 @@ func Test_sort_default() call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], '')) call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], 0)) call assert_equal(['2', 'A', 'a', 'AA', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], 1)) - call assert_fails('call sort([3.3, 1, "2"], 3)', "E474") + call assert_fails('call sort([3.3, 1, "2"], 3)', "E474:") endfunc " Tests for the ":sort" command. diff --git a/src/testdir/test_syntax.vim b/src/testdir/test_syntax.vim index 50e1a59b3c..024ba59a40 100644 --- a/src/testdir/test_syntax.vim +++ b/src/testdir/test_syntax.vim @@ -151,6 +151,10 @@ func Test_syntax_list() let a = execute('syntax list') call assert_equal("\nNo Syntax items defined for this buffer", a) + syntax keyword Type int containedin=g1 skipwhite skipempty skipnl nextgroup=Abc + let exp = "Type xxx containedin=g1 nextgroup=Abc skipnl skipwhite skipempty int" + call assert_equal(exp, split(execute("syntax list"), "\n")[1]) + bd endfunc diff --git a/src/testdir/test_utf8.vim b/src/testdir/test_utf8.vim index fa6f76a610..e83a3d04d3 100644 --- a/src/testdir/test_utf8.vim +++ b/src/testdir/test_utf8.vim @@ -103,6 +103,9 @@ func Test_list2str_str2list_latin1() let sres = list2str(l, 1) call assert_equal([65, 66, 67], str2list("ABC")) + " Try converting a list to a string in latin-1 encoding + call assert_equal([1, 2, 3], str2list(list2str([1, 2, 3]))) + let &encoding = save_encoding call assert_equal(l, lres) call assert_equal(s, sres) diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim index cef45050be..7c86836619 100644 --- a/src/testdir/test_vimscript.vim +++ b/src/testdir/test_vimscript.vim @@ -1980,6 +1980,86 @@ func Test_float_conversion_errors() endif endfunc +func Test_invalid_function_names() + " function name not starting with capital + let caught_e128 = 0 + try + func! g:test() + echo "test" + endfunc + catch /E128:/ + let caught_e128 = 1 + endtry + call assert_equal(1, caught_e128) + + " function name includes a colon + let caught_e884 = 0 + try + func! b:test() + echo "test" + endfunc + catch /E884:/ + let caught_e884 = 1 + endtry + call assert_equal(1, caught_e884) + + " function name folowed by # + let caught_e128 = 0 + try + func! test2() "# + echo "test2" + endfunc + catch /E128:/ + let caught_e128 = 1 + endtry + call assert_equal(1, caught_e128) + + " function name starting with/without "g:", buffer-local funcref. + function! g:Foo(n) + return 'called Foo(' . a:n . ')' + endfunction + let b:my_func = function('Foo') + call assert_equal('called Foo(1)', b:my_func(1)) + call assert_equal('called Foo(2)', g:Foo(2)) + call assert_equal('called Foo(3)', Foo(3)) + delfunc g:Foo + + " script-local function used in Funcref must exist. + let lines =<< trim END + func s:Testje() + return "foo" + endfunc + let Bar = function('s:Testje') + call assert_equal(0, exists('s:Testje')) + call assert_equal(1, exists('*s:Testje')) + call assert_equal(1, exists('Bar')) + call assert_equal(1, exists('*Bar')) + END + call writefile(lines, 'Xscript') + source Xscript + call delete('Xscript') +endfunc + +" substring and variable name +func Test_substring_var() + let str = 'abcdef' + let n = 3 + call assert_equal('def', str[n:]) + call assert_equal('abcd', str[:n]) + call assert_equal('d', str[n:n]) + unlet n + let nn = 3 + call assert_equal('def', str[nn:]) + call assert_equal('abcd', str[:nn]) + call assert_equal('d', str[nn:nn]) + unlet nn + let b:nn = 4 + call assert_equal('ef', str[b:nn:]) + call assert_equal('abcde', str[:b:nn]) + call assert_equal('e', str[b:nn:b:nn]) + unlet b:nn +endfunc + "------------------------------------------------------------------------------- " Modelines {{{1 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/version.c b/src/version.c index 61f71a0c1d..1c5ad56246 100644 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 610, +/**/ 609, /**/ 608, |