To: vim_dev@googlegroups.com Subject: Patch 8.2.0610 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0610 Problem: Some tests are still old style. Solution: Convert to new style tests. (Yegappan Lakshmanan, closes #5957) Files: src/testdir/test_blob.vim, src/testdir/test_cursor_func.vim, src/testdir/test_eval.in, src/testdir/test_eval.ok, src/testdir/test_eval_func.vim, src/testdir/test_eval_stuff.vim, src/testdir/test_expr.vim, src/testdir/test_filter_map.vim, src/testdir/test_functions.vim, src/testdir/test_listdict.vim, src/testdir/test_sort.vim, src/testdir/test_syntax.vim, src/testdir/test_utf8.vim, src/testdir/test_vimscript.vim *** ../vim-8.2.0609/src/testdir/test_blob.vim 2020-04-06 21:12:38.809322010 +0200 --- src/testdir/test_blob.vim 2020-04-20 16:30:37.216278824 +0200 *************** *** 307,312 **** --- 307,315 ---- 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() *** ../vim-8.2.0609/src/testdir/test_cursor_func.vim 2019-10-27 21:25:06.000000000 +0100 --- src/testdir/test_cursor_func.vim 2020-04-20 16:30:37.216278824 +0200 *************** *** 115,117 **** --- 115,119 ---- close bwipe! endfunc + + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.0609/src/testdir/test_eval.in 2020-04-18 21:56:35.394407188 +0200 --- src/testdir/test_eval.in 2020-04-20 16:30:37.216278824 +0200 *************** *** 27,40 **** 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') --- 27,32 ---- *************** *** 109,211 **** 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: --- 101,119 ---- *** ../vim-8.2.0609/src/testdir/test_eval.ok 2020-04-18 21:56:35.394407188 +0200 --- src/testdir/test_eval.ok 2020-04-20 16:32:30.440013298 +0200 *************** *** 208,251 **** {{{1 System clipboard *: type V; value: clipboard contents (['clipboard contents']), expr: clipboard contents (['clipboard contents']) *: type V; value: something else (['something else']), expr: something else (['something else']) - {{{1 Errors - Executing call setreg() - Vim(call):E119: Not enough arguments for function: setreg - Executing call setreg(1) - Vim(call):E119: Not enough arguments for function: setreg - Executing call setreg(1, 2, 3, 4) - Vim(call):E118: Too many arguments for function: setreg - Executing call setreg([], 2) - Vim(call):E730: using List as a String - Executing call setreg(1, {}) - Vim(call):E731: using Dictionary as a String - Executing call setreg(1, 2, []) - Vim(call):E730: using List as a String - Executing call setreg("/", ["1", "2"]) - Vim(call):E883: search pattern and expression register may not contain two or more lines - Executing call setreg("=", ["1", "2"]) - Vim(call):E883: search pattern and expression register may not contain two or more lines - Executing call setreg(1, ["", "", [], ""]) - Vim(call):E730: using List as a String - Vim(function):E128: Function name must start with a capital or "s:": g:test() - Vim(function):E884: Function name cannot contain a colon: b:test() - Vim(function):E128: Function name must start with a capital or "s:": test2() "# - called Foo(1) - called Foo(2) - called Foo(3) - s:Testje exists: 0 - func s:Testje exists: 1 - Bar exists: 1 - func Bar exists: 1 - Vim(call):E116: Invalid arguments for function append - {{{1 getcurpos/setpos - 6 - def - abcd - d - def - abcd - d - ef - abcde - e --- 208,210 ---- *** ../vim-8.2.0609/src/testdir/test_eval_func.vim 2019-01-09 22:34:29.000000000 +0100 --- src/testdir/test_eval_func.vim 1970-01-01 01:00:00.000000000 +0100 *************** *** 1,10 **** - " 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') --- 0 ---- *** ../vim-8.2.0609/src/testdir/test_eval_stuff.vim 2020-04-18 23:20:33.635808536 +0200 --- src/testdir/test_eval_stuff.vim 2020-04-20 16:30:37.216278824 +0200 *************** *** 349,355 **** call setreg('I', 'abcI') call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']") call Assert_regput('I', ['==', '=abcI=']) - endfunc " vim: shiftwidth=2 sts=2 expandtab --- 349,365 ---- call setreg('I', 'abcI') call Assert_reg('I', "v", "abcI", "['abcI']", "abcI", "['abcI']") call Assert_regput('I', ['==', '=abcI=']) + " 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 *** ../vim-8.2.0609/src/testdir/test_expr.vim 2020-04-13 19:55:47.567369413 +0200 --- src/testdir/test_expr.vim 2020-04-20 16:30:37.220278815 +0200 *************** *** 44,49 **** --- 44,50 ---- 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' *** ../vim-8.2.0609/src/testdir/test_filter_map.vim 2020-01-29 22:17:13.029497794 +0100 --- src/testdir/test_filter_map.vim 2020-04-20 16:30:37.220278815 +0200 *************** *** 89,97 **** call assert_equal({"foo": "f", "bar": "b", "baz": "b"}, map(copy(dict), function('s:filter4'))) endfunc ! func Test_map_fails() call assert_fails('call map([1], "42 +")', 'E15:') call assert_fails('call filter([1], "42 +")', 'E15:') endfunc func Test_map_and_modify() --- 89,103 ---- call assert_equal({"foo": "f", "bar": "b", "baz": "b"}, map(copy(dict), function('s:filter4'))) endfunc ! 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,105 **** --- 109,113 ---- 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 *** ../vim-8.2.0609/src/testdir/test_functions.vim 2020-04-08 21:50:18.872619665 +0200 --- src/testdir/test_functions.vim 2020-04-20 16:30:37.220278815 +0200 *************** *** 99,107 **** --- 99,109 ---- 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,804 **** --- 801,809 ---- split only undo + + " Using $ instead of '$' must give an error + call assert_fails("call append($, 'foobar')", 'E116:') endfunc func Test_getbufvar() *************** *** 2043,2048 **** --- 2048,2054 ---- " list2str() call assert_equal('ABC', list2str(range(65, 67))) + call assert_fails('let s = list2str(5)', 'E474:') " lock() let thelist = range(5) *************** *** 2216,2219 **** --- 2222,2238 ---- 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 *** ../vim-8.2.0609/src/testdir/test_listdict.vim 2020-04-06 21:35:02.464237765 +0200 --- src/testdir/test_listdict.vim 2020-04-20 16:30:37.220278815 +0200 *************** *** 32,37 **** --- 32,38 ---- 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,173 **** --- 169,187 ---- 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,268 **** unlet g:dict endfunc ! " Test removing items in la dictionary func Test_dict_func_remove() let d = {1:'a', 2:'b', 3:'c'} call assert_equal('b', remove(d, 2)) --- 276,282 ---- unlet g:dict endfunc ! " 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,639 **** --- 648,658 ---- 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,753 **** --- 767,775 ---- 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,876 **** --- 893,918 ---- 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 *** ../vim-8.2.0609/src/testdir/test_sort.vim 2020-02-17 22:11:39.666644199 +0100 --- src/testdir/test_sort.vim 2020-04-20 16:30:37.220278815 +0200 *************** *** 47,53 **** 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") endfunc " Tests for the ":sort" command. --- 47,53 ---- 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:") endfunc " Tests for the ":sort" command. *** ../vim-8.2.0609/src/testdir/test_syntax.vim 2020-04-19 18:31:21.715570505 +0200 --- src/testdir/test_syntax.vim 2020-04-20 16:30:37.220278815 +0200 *************** *** 151,156 **** --- 151,160 ---- 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 *** ../vim-8.2.0609/src/testdir/test_utf8.vim 2020-03-25 22:23:41.898363595 +0100 --- src/testdir/test_utf8.vim 2020-04-20 16:30:37.220278815 +0200 *************** *** 103,108 **** --- 103,111 ---- 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) *** ../vim-8.2.0609/src/testdir/test_vimscript.vim 2020-04-19 17:24:48.665264342 +0200 --- src/testdir/test_vimscript.vim 2020-04-20 16:30:37.220278815 +0200 *************** *** 1980,1985 **** --- 1980,2065 ---- 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 *** ../vim-8.2.0609/src/version.c 2020-04-20 16:21:50.269555351 +0200 --- src/version.c 2020-04-20 16:31:48.044112484 +0200 *************** *** 748,749 **** --- 748,751 ---- { /* Add new patch number below this line */ + /**/ + 610, /**/ -- Engineers are widely recognized as superior marriage material: intelligent, dependable, employed, honest, and handy around the house. (Scott Adams - The Dilbert principle) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///