mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	Merge pull request #20818 from zeertzjq/vim-8.2.0531
vim-patch:8.2.{0531,0534,0606,1113}: various tests
			
			
This commit is contained in:
		| @@ -179,4 +179,4 @@ newtestssilent: $(NEW_TESTS_RES) | |||||||
| 	@echo "[OLDTEST] Running" $* | 	@echo "[OLDTEST] Running" $* | ||||||
| 	@rm -rf $*.failed test.ok $(RM_ON_RUN) | 	@rm -rf $*.failed test.ok $(RM_ON_RUN) | ||||||
| 	@mkdir -p $(TMPDIR) | 	@mkdir -p $(TMPDIR) | ||||||
| 	@/bin/sh runnvim.sh $(ROOT) $(NVIM_PRG) $* $(RUN_VIMTEST) $(NO_INITS) -u NONE -S runtest.vim $*.vim | 	@/bin/sh runnvim.sh $(ROOT) $(NVIM_PRG) $* $(RUN_VIMTEST) $(NO_INITS) -u NONE --cmd "set shortmess-=F" -S runtest.vim $*.vim | ||||||
|   | |||||||
| @@ -147,7 +147,7 @@ func Test_client_server() | |||||||
|  |  | ||||||
|     " Edit files in separate tab pages |     " Edit files in separate tab pages | ||||||
|     call system(cmd .. ' --remote-tab Xfile1 Xfile2 Xfile3') |     call system(cmd .. ' --remote-tab Xfile1 Xfile2 Xfile3') | ||||||
|     call assert_equal('3', remote_expr(name, 'tabpagenr("$")')) |     call WaitForAssert({-> assert_equal('3', remote_expr(name, 'tabpagenr("$")'))}) | ||||||
|     call assert_equal('Xfile2', remote_expr(name, 'bufname(tabpagebuflist(2)[0])')) |     call assert_equal('Xfile2', remote_expr(name, 'bufname(tabpagebuflist(2)[0])')) | ||||||
|     eval name->remote_send(":%bw!\<CR>") |     eval name->remote_send(":%bw!\<CR>") | ||||||
|  |  | ||||||
|   | |||||||
| @@ -87,4 +87,10 @@ func Test_source_autocmd_sfile() | |||||||
|   call delete('Xscript.vim') |   call delete('Xscript.vim') | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | func Test_source_error() | ||||||
|  |   call assert_fails('scriptencoding utf-8', 'E167:') | ||||||
|  |   call assert_fails('finish', 'E168:') | ||||||
|  |   " call assert_fails('scriptversion 2', 'E984:') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
| " vim: shiftwidth=2 sts=2 expandtab | " vim: shiftwidth=2 sts=2 expandtab | ||||||
|   | |||||||
| @@ -351,6 +351,18 @@ func Test_syntax_arg_skipped() | |||||||
|   syn clear |   syn clear | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | " Check for an error. Used when multiple errors are thrown and we are checking | ||||||
|  | " for an earliest error. | ||||||
|  | func AssertFails(cmd, errcode) | ||||||
|  |   let save_exception = '' | ||||||
|  |   try | ||||||
|  |     exe a:cmd | ||||||
|  |   catch | ||||||
|  |     let save_exception = v:exception | ||||||
|  |   endtry | ||||||
|  |   call assert_match(a:errcode, save_exception) | ||||||
|  | endfunc | ||||||
|  |  | ||||||
| func Test_syntax_invalid_arg() | func Test_syntax_invalid_arg() | ||||||
|   call assert_fails('syntax case asdf', 'E390:') |   call assert_fails('syntax case asdf', 'E390:') | ||||||
|   if has('conceal') |   if has('conceal') | ||||||
| @@ -358,11 +370,49 @@ func Test_syntax_invalid_arg() | |||||||
|   endif |   endif | ||||||
|   call assert_fails('syntax spell asdf', 'E390:') |   call assert_fails('syntax spell asdf', 'E390:') | ||||||
|   call assert_fails('syntax clear @ABCD', 'E391:') |   call assert_fails('syntax clear @ABCD', 'E391:') | ||||||
|   call assert_fails('syntax include @Xxx', 'E397:') |   call assert_fails('syntax include random_file', 'E484:') | ||||||
|   call assert_fails('syntax region X start="{"', 'E399:') |   call assert_fails('syntax include <afile>', 'E495:') | ||||||
|   call assert_fails('syntax sync x', 'E404:') |   call assert_fails('syntax sync x', 'E404:') | ||||||
|   call assert_fails('syntax keyword Abc a[', 'E789:') |   call assert_fails('syntax keyword Abc a[', 'E789:') | ||||||
|   call assert_fails('syntax keyword Abc a[bc]d', 'E890:') |   call assert_fails('syntax keyword Abc a[bc]d', 'E890:') | ||||||
|  |   call assert_fails('syntax cluster Abc add=A add=', 'E475:') | ||||||
|  |  | ||||||
|  |   " Test for too many \z\( and unmatched \z\( | ||||||
|  |   " Not able to use assert_fails() here because both E50:/E879: and E475: | ||||||
|  |   " messages are emitted. | ||||||
|  |   set regexpengine=1 | ||||||
|  |   call AssertFails("syntax region MyRegion start='\\z\\(' end='\\*/'", 'E52:') | ||||||
|  |  | ||||||
|  |   let cmd = "syntax region MyRegion start='" | ||||||
|  |   let cmd ..= repeat("\\z\\(.\\)", 10) .. "' end='\*/'" | ||||||
|  |   call AssertFails(cmd, 'E50:') | ||||||
|  |  | ||||||
|  |   set regexpengine=2 | ||||||
|  |   call AssertFails("syntax region MyRegion start='\\z\\(' end='\\*/'", 'E54:') | ||||||
|  |  | ||||||
|  |   let cmd = "syntax region MyRegion start='" | ||||||
|  |   let cmd ..= repeat("\\z\\(.\\)", 10) .. "' end='\*/'" | ||||||
|  |   call AssertFails(cmd, 'E879:') | ||||||
|  |   set regexpengine& | ||||||
|  |  | ||||||
|  |   call AssertFails('syntax keyword cMyItem grouphere G1', 'E393:') | ||||||
|  |   call AssertFails('syntax sync match Abc grouphere MyItem "abc"', 'E394:') | ||||||
|  |   call AssertFails('syn keyword Type contains int', 'E395:') | ||||||
|  |   call assert_fails('syntax include @Xxx', 'E397:') | ||||||
|  |   call AssertFails('syntax region X start', 'E398:') | ||||||
|  |   call assert_fails('syntax region X start="{"', 'E399:') | ||||||
|  |   call AssertFails('syntax cluster contains=Abc', 'E400:') | ||||||
|  |   call AssertFails("syntax match Character /'.'", 'E401:') | ||||||
|  |   call AssertFails("syntax match Character /'.'/a", 'E402:') | ||||||
|  |   call assert_fails('syntax sync linecont /pat', 'E404:') | ||||||
|  |   call assert_fails('syntax sync linecont', 'E404:') | ||||||
|  |   call assert_fails('syntax sync linecont /pat1/ linecont /pat2/', 'E403:') | ||||||
|  |   call assert_fails('syntax sync minlines=a', 'E404:') | ||||||
|  |   call AssertFails('syntax match ABC /x/ contains=', 'E406:') | ||||||
|  |   call AssertFails("syntax match Character contains /'.'/", 'E405:') | ||||||
|  |   call AssertFails('syntax match ccFoo "Foo" nextgroup=ALLBUT,F', 'E407:') | ||||||
|  |   call AssertFails('syntax region Block start="{" contains=F,ALLBUT', 'E408:') | ||||||
|  |   call AssertFails("syntax match Characters contains=a.*x /'.'/", 'E409:') | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| func Test_syn_sync() | func Test_syn_sync() | ||||||
| @@ -390,6 +440,7 @@ func Test_syn_clear() | |||||||
|   hi clear Foo |   hi clear Foo | ||||||
|   call assert_equal('Foo', synIDattr(hlID("Foo"), "name")) |   call assert_equal('Foo', synIDattr(hlID("Foo"), "name")) | ||||||
|   hi clear Bar |   hi clear Bar | ||||||
|  |   call assert_fails('syntax clear invalid_syngroup', 'E28:') | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| func Test_invalid_name() | func Test_invalid_name() | ||||||
| @@ -483,6 +534,8 @@ func Test_conceal() | |||||||
|   call assert_match('16     ', ScreenLines(2, 7)[0]) |   call assert_match('16     ', ScreenLines(2, 7)[0]) | ||||||
|   call assert_equal([[0, '', 0], [1, '', 1], [1, '', 1], [1, '', 2], [1, '', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)')) |   call assert_equal([[0, '', 0], [1, '', 1], [1, '', 1], [1, '', 2], [1, '', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)')) | ||||||
|  |  | ||||||
|  |   call AssertFails("syntax match Entity '&' conceal cchar=\<Tab>", 'E844:') | ||||||
|  |  | ||||||
|   syn clear |   syn clear | ||||||
|   set conceallevel& |   set conceallevel& | ||||||
|   bw! |   bw! | ||||||
|   | |||||||
| @@ -3,6 +3,9 @@ | |||||||
| " Also test that a builtin function cannot be replaced. | " Also test that a builtin function cannot be replaced. | ||||||
| " Also test for regression when calling arbitrary expression. | " Also test for regression when calling arbitrary expression. | ||||||
|  |  | ||||||
|  | source check.vim | ||||||
|  | source shared.vim | ||||||
|  |  | ||||||
| func Table(title, ...) | func Table(title, ...) | ||||||
|   let ret = a:title |   let ret = a:title | ||||||
|   let idx = 1 |   let idx = 1 | ||||||
| @@ -83,6 +86,7 @@ func Test_user_func() | |||||||
|   normal o[(one again |   normal o[(one again | ||||||
|   call assert_equal('1. one again', getline('.')) |   call assert_equal('1. one again', getline('.')) | ||||||
|  |  | ||||||
|  |   " Try to overwrite a function in the global (g:) scope | ||||||
|   call assert_equal(3, max([1, 2, 3])) |   call assert_equal(3, max([1, 2, 3])) | ||||||
|   call assert_fails("call extend(g:, {'max': function('min')})", 'E704') |   call assert_fails("call extend(g:, {'max': function('min')})", 'E704') | ||||||
|   call assert_equal(3, max([1, 2, 3])) |   call assert_equal(3, max([1, 2, 3])) | ||||||
| @@ -178,4 +182,267 @@ func Test_function_list() | |||||||
|   call assert_fails("function Xabc", 'E123:') |   call assert_fails("function Xabc", 'E123:') | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | " Test for <sfile>, <slnum> in a function | ||||||
|  | func Test_sfile_in_function() | ||||||
|  |   func Xfunc() | ||||||
|  |     call assert_match('..Test_sfile_in_function\[5]..Xfunc', expand('<sfile>')) | ||||||
|  |     call assert_equal('2', expand('<slnum>')) | ||||||
|  |   endfunc | ||||||
|  |   call Xfunc() | ||||||
|  |   delfunc Xfunc | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | " Test trailing text after :endfunction				    {{{1 | ||||||
|  | func Test_endfunction_trailing() | ||||||
|  |   call assert_false(exists('*Xtest')) | ||||||
|  |  | ||||||
|  |   exe "func Xtest()\necho 'hello'\nendfunc\nlet done = 'yes'" | ||||||
|  |   call assert_true(exists('*Xtest')) | ||||||
|  |   call assert_equal('yes', done) | ||||||
|  |   delfunc Xtest | ||||||
|  |   unlet done | ||||||
|  |  | ||||||
|  |   exe "func Xtest()\necho 'hello'\nendfunc|let done = 'yes'" | ||||||
|  |   call assert_true(exists('*Xtest')) | ||||||
|  |   call assert_equal('yes', done) | ||||||
|  |   delfunc Xtest | ||||||
|  |   unlet done | ||||||
|  |  | ||||||
|  |   " trailing line break | ||||||
|  |   exe "func Xtest()\necho 'hello'\nendfunc\n" | ||||||
|  |   call assert_true(exists('*Xtest')) | ||||||
|  |   delfunc Xtest | ||||||
|  |  | ||||||
|  |   set verbose=1 | ||||||
|  |   exe "func Xtest()\necho 'hello'\nendfunc \" garbage" | ||||||
|  |   call assert_notmatch('W22:', split(execute('1messages'), "\n")[0]) | ||||||
|  |   call assert_true(exists('*Xtest')) | ||||||
|  |   delfunc Xtest | ||||||
|  |  | ||||||
|  |   exe "func Xtest()\necho 'hello'\nendfunc garbage" | ||||||
|  |   call assert_match('W22:', split(execute('1messages'), "\n")[0]) | ||||||
|  |   call assert_true(exists('*Xtest')) | ||||||
|  |   delfunc Xtest | ||||||
|  |   set verbose=0 | ||||||
|  |  | ||||||
|  |   func Xtest(a1, a2) | ||||||
|  |     echo a:a1 .. a:a2 | ||||||
|  |   endfunc | ||||||
|  |   set verbose=15 | ||||||
|  |   redir @a | ||||||
|  |   call Xtest(123, repeat('x', 100)) | ||||||
|  |   redir END | ||||||
|  |   call assert_match('calling Xtest(123, ''xxxxxxx.*x\.\.\.x.*xxxx'')', getreg('a')) | ||||||
|  |   delfunc Xtest | ||||||
|  |   set verbose=0 | ||||||
|  |  | ||||||
|  |   function Foo() | ||||||
|  |     echo 'hello' | ||||||
|  |   endfunction | echo 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' | ||||||
|  |   delfunc Foo | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | func Test_delfunction_force() | ||||||
|  |   delfunc! Xtest | ||||||
|  |   delfunc! Xtest | ||||||
|  |   func Xtest() | ||||||
|  |     echo 'nothing' | ||||||
|  |   endfunc | ||||||
|  |   delfunc! Xtest | ||||||
|  |   delfunc! Xtest | ||||||
|  |  | ||||||
|  |   " Try deleting the current function | ||||||
|  |   call assert_fails('delfunc Test_delfunction_force', 'E131:') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | func Test_function_defined_line() | ||||||
|  |   CheckNotGui | ||||||
|  |  | ||||||
|  |   let lines =<< trim [CODE] | ||||||
|  |   " F1 | ||||||
|  |   func F1() | ||||||
|  |     " F2 | ||||||
|  |     func F2() | ||||||
|  |       " | ||||||
|  |       " | ||||||
|  |       " | ||||||
|  |       return | ||||||
|  |     endfunc | ||||||
|  |     " F3 | ||||||
|  |     execute "func F3()\n\n\n\nreturn\nendfunc" | ||||||
|  |     " F4 | ||||||
|  |     execute "func F4()\n | ||||||
|  |                 \\n | ||||||
|  |                 \\n | ||||||
|  |                 \\n | ||||||
|  |                 \return\n | ||||||
|  |                 \endfunc" | ||||||
|  |   endfunc | ||||||
|  |   " F5 | ||||||
|  |   execute "func F5()\n\n\n\nreturn\nendfunc" | ||||||
|  |   " F6 | ||||||
|  |   execute "func F6()\n | ||||||
|  |               \\n | ||||||
|  |               \\n | ||||||
|  |               \\n | ||||||
|  |               \return\n | ||||||
|  |               \endfunc" | ||||||
|  |   call F1() | ||||||
|  |   verbose func F1 | ||||||
|  |   verbose func F2 | ||||||
|  |   verbose func F3 | ||||||
|  |   verbose func F4 | ||||||
|  |   verbose func F5 | ||||||
|  |   verbose func F6 | ||||||
|  |   qall! | ||||||
|  |   [CODE] | ||||||
|  |  | ||||||
|  |   call writefile(lines, 'Xtest.vim') | ||||||
|  |   let res = system(GetVimCommandClean() .. ' -es -X -S Xtest.vim') | ||||||
|  |   call assert_equal(0, v:shell_error) | ||||||
|  |  | ||||||
|  |   let m = matchstr(res, 'function F1()[^[:print:]]*[[:print:]]*') | ||||||
|  |   call assert_match(' line 2$', m) | ||||||
|  |  | ||||||
|  |   let m = matchstr(res, 'function F2()[^[:print:]]*[[:print:]]*') | ||||||
|  |   call assert_match(' line 4$', m) | ||||||
|  |  | ||||||
|  |   let m = matchstr(res, 'function F3()[^[:print:]]*[[:print:]]*') | ||||||
|  |   call assert_match(' line 11$', m) | ||||||
|  |  | ||||||
|  |   let m = matchstr(res, 'function F4()[^[:print:]]*[[:print:]]*') | ||||||
|  |   call assert_match(' line 13$', m) | ||||||
|  |  | ||||||
|  |   let m = matchstr(res, 'function F5()[^[:print:]]*[[:print:]]*') | ||||||
|  |   call assert_match(' line 21$', m) | ||||||
|  |  | ||||||
|  |   let m = matchstr(res, 'function F6()[^[:print:]]*[[:print:]]*') | ||||||
|  |   call assert_match(' line 23$', m) | ||||||
|  |  | ||||||
|  |   call delete('Xtest.vim') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | " Test for defining a function reference in the global scope | ||||||
|  | func Test_add_funcref_to_global_scope() | ||||||
|  |   let x = g: | ||||||
|  |   let caught_E862 = 0 | ||||||
|  |   try | ||||||
|  |     func x.Xfunc() | ||||||
|  |       return 1 | ||||||
|  |     endfunc | ||||||
|  |   catch /E862:/ | ||||||
|  |     let caught_E862 = 1 | ||||||
|  |   endtry | ||||||
|  |   call assert_equal(1, caught_E862) | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | func Test_funccall_garbage_collect() | ||||||
|  |   func Func(x, ...) | ||||||
|  |     call add(a:x, a:000) | ||||||
|  |   endfunc | ||||||
|  |   call Func([], []) | ||||||
|  |   " Must not crash cause by invalid freeing | ||||||
|  |   call test_garbagecollect_now() | ||||||
|  |   call assert_true(v:true) | ||||||
|  |   delfunc Func | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | " Test for script-local function | ||||||
|  | func <SID>DoLast() | ||||||
|  |   call append(line('$'), "last line") | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | func s:DoNothing() | ||||||
|  |   call append(line('$'), "nothing line") | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | func Test_script_local_func() | ||||||
|  |   set nocp nomore viminfo+=nviminfo | ||||||
|  |   new | ||||||
|  |   nnoremap <buffer> _x	:call <SID>DoNothing()<bar>call <SID>DoLast()<bar>delfunc <SID>DoNothing<bar>delfunc <SID>DoLast<cr> | ||||||
|  |  | ||||||
|  |   normal _x | ||||||
|  |   call assert_equal('nothing line', getline(2)) | ||||||
|  |   call assert_equal('last line', getline(3)) | ||||||
|  |   close! | ||||||
|  |  | ||||||
|  |   " Try to call a script local function in global scope | ||||||
|  |   let lines =<< trim [CODE] | ||||||
|  |     :call assert_fails('call s:Xfunc()', 'E81:') | ||||||
|  |     :call assert_fails('let x = call("<SID>Xfunc", [])', 'E120:') | ||||||
|  |     :call writefile(v:errors, 'Xresult') | ||||||
|  |     :qall | ||||||
|  |  | ||||||
|  |   [CODE] | ||||||
|  |   call writefile(lines, 'Xscript') | ||||||
|  |   if RunVim([], [], '-s Xscript') | ||||||
|  |     call assert_equal([], readfile('Xresult')) | ||||||
|  |   endif | ||||||
|  |   call delete('Xresult') | ||||||
|  |   call delete('Xscript') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | " Test for errors in defining new functions | ||||||
|  | func Test_func_def_error() | ||||||
|  |   call assert_fails('func Xfunc abc ()', 'E124:') | ||||||
|  |   call assert_fails('func Xfunc(', 'E125:') | ||||||
|  |   call assert_fails('func xfunc()', 'E128:') | ||||||
|  |  | ||||||
|  |   " Try to redefine a function that is in use | ||||||
|  |   let caught_E127 = 0 | ||||||
|  |   try | ||||||
|  |     func! Test_func_def_error() | ||||||
|  |     endfunc | ||||||
|  |   catch /E127:/ | ||||||
|  |     let caught_E127 = 1 | ||||||
|  |   endtry | ||||||
|  |   call assert_equal(1, caught_E127) | ||||||
|  |  | ||||||
|  |   " Try to define a function in a dict twice | ||||||
|  |   let d = {} | ||||||
|  |   let lines =<< trim END | ||||||
|  |     func d.F1() | ||||||
|  |       return 1 | ||||||
|  |     endfunc | ||||||
|  |   END | ||||||
|  |   let l = join(lines, "\n") . "\n" | ||||||
|  |   exe l | ||||||
|  |   call assert_fails('exe l', 'E717:') | ||||||
|  |  | ||||||
|  |   " Define an autoload function with an incorrect file name | ||||||
|  |   call writefile(['func foo#Bar()', 'return 1', 'endfunc'], 'Xscript') | ||||||
|  |   call assert_fails('source Xscript', 'E746:') | ||||||
|  |   call delete('Xscript') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | " Test for deleting a function | ||||||
|  | func Test_del_func() | ||||||
|  |   call assert_fails('delfunction Xabc', 'E130:') | ||||||
|  |   let d = {'a' : 10} | ||||||
|  |   call assert_fails('delfunc d.a', 'E718:') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | " Test for calling return outside of a function | ||||||
|  | func Test_return_outside_func() | ||||||
|  |   call writefile(['return 10'], 'Xscript') | ||||||
|  |   call assert_fails('source Xscript', 'E133:') | ||||||
|  |   call delete('Xscript') | ||||||
|  | endfunc | ||||||
|  |  | ||||||
|  | " Test for errors in calling a function | ||||||
|  | func Test_func_arg_error() | ||||||
|  |   " Too many arguments | ||||||
|  |   call assert_fails("call call('min', range(1,20))", 'E118:') | ||||||
|  |   call assert_fails("call call('min', range(1,21))", 'E699:') | ||||||
|  |   call assert_fails('echo min(0,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0,1)', | ||||||
|  |         \ 'E740:') | ||||||
|  |  | ||||||
|  |   " Missing dict argument | ||||||
|  |   func Xfunc() dict | ||||||
|  |     return 1 | ||||||
|  |   endfunc | ||||||
|  |   call assert_fails('call Xfunc()', 'E725:') | ||||||
|  |   delfunc Xfunc | ||||||
|  | endfunc | ||||||
|  |  | ||||||
| " vim: shiftwidth=2 sts=2 expandtab | " vim: shiftwidth=2 sts=2 expandtab | ||||||
|   | |||||||
| @@ -1495,58 +1495,6 @@ func Test_bitwise_functions() | |||||||
|     call assert_fails("call invert({})", 'E728:') |     call assert_fails("call invert({})", 'E728:') | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| " Test trailing text after :endfunction				    {{{1 |  | ||||||
| func Test_endfunction_trailing() |  | ||||||
|     call assert_false(exists('*Xtest')) |  | ||||||
|  |  | ||||||
|     exe "func Xtest()\necho 'hello'\nendfunc\nlet done = 'yes'" |  | ||||||
|     call assert_true(exists('*Xtest')) |  | ||||||
|     call assert_equal('yes', done) |  | ||||||
|     delfunc Xtest |  | ||||||
|     unlet done |  | ||||||
|  |  | ||||||
|     exe "func Xtest()\necho 'hello'\nendfunc|let done = 'yes'" |  | ||||||
|     call assert_true(exists('*Xtest')) |  | ||||||
|     call assert_equal('yes', done) |  | ||||||
|     delfunc Xtest |  | ||||||
|     unlet done |  | ||||||
|  |  | ||||||
|     " trailing line break |  | ||||||
|     exe "func Xtest()\necho 'hello'\nendfunc\n" |  | ||||||
|     call assert_true(exists('*Xtest')) |  | ||||||
|     delfunc Xtest |  | ||||||
|  |  | ||||||
|     set verbose=1 |  | ||||||
|     exe "func Xtest()\necho 'hello'\nendfunc \" garbage" |  | ||||||
|     call assert_notmatch('W22:', split(execute('1messages'), "\n")[0]) |  | ||||||
|     call assert_true(exists('*Xtest')) |  | ||||||
|     delfunc Xtest |  | ||||||
|  |  | ||||||
|     exe "func Xtest()\necho 'hello'\nendfunc garbage" |  | ||||||
|     call assert_match('W22:', split(execute('1messages'), "\n")[0]) |  | ||||||
|     call assert_true(exists('*Xtest')) |  | ||||||
|     delfunc Xtest |  | ||||||
|     set verbose=0 |  | ||||||
|  |  | ||||||
|     function Foo() |  | ||||||
| 	echo 'hello' |  | ||||||
|     endfunction | echo 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |  | ||||||
|     delfunc Foo |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| func Test_delfunction_force() |  | ||||||
|     delfunc! Xtest |  | ||||||
|     delfunc! Xtest |  | ||||||
|     func Xtest() |  | ||||||
| 	echo 'nothing' |  | ||||||
|     endfunc |  | ||||||
|     delfunc! Xtest |  | ||||||
|     delfunc! Xtest |  | ||||||
|  |  | ||||||
|     " Try deleting the current function |  | ||||||
|     call assert_fails('delfunc Test_delfunction_force', 'E131:') |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| " Test using bang after user command				    {{{1 | " Test using bang after user command				    {{{1 | ||||||
| func Test_user_command_with_bang() | func Test_user_command_with_bang() | ||||||
|     command -bang Nieuw let nieuw = 1 |     command -bang Nieuw let nieuw = 1 | ||||||
| @@ -1556,26 +1504,6 @@ func Test_user_command_with_bang() | |||||||
|     delcommand Nieuw |     delcommand Nieuw | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| " Test for script-local function |  | ||||||
| func <SID>DoLast() |  | ||||||
|   call append(line('$'), "last line") |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| func s:DoNothing() |  | ||||||
|   call append(line('$'), "nothing line") |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| func Test_script_local_func() |  | ||||||
|   set nocp nomore viminfo+=nviminfo |  | ||||||
|   new |  | ||||||
|   nnoremap <buffer> _x	:call <SID>DoNothing()<bar>call <SID>DoLast()<bar>delfunc <SID>DoNothing<bar>delfunc <SID>DoLast<cr> |  | ||||||
|  |  | ||||||
|   normal _x |  | ||||||
|   call assert_equal('nothing line', getline(2)) |  | ||||||
|   call assert_equal('last line', getline(3)) |  | ||||||
|   enew! | close |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| func Test_script_expand_sfile() | func Test_script_expand_sfile() | ||||||
|   let lines =<< trim END |   let lines =<< trim END | ||||||
|     func s:snr() |     func s:snr() | ||||||
| @@ -1735,84 +1663,6 @@ func Test_unlet_env() | |||||||
|     call assert_equal('', $TESTVAR) |     call assert_equal('', $TESTVAR) | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| func Test_funccall_garbage_collect() |  | ||||||
|     func Func(x, ...) |  | ||||||
|         call add(a:x, a:000) |  | ||||||
|     endfunc |  | ||||||
|     call Func([], []) |  | ||||||
|     " Must not crash cause by invalid freeing |  | ||||||
|     call test_garbagecollect_now() |  | ||||||
|     call assert_true(v:true) |  | ||||||
|     delfunc Func |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| func Test_function_defined_line() |  | ||||||
|     CheckNotGui |  | ||||||
|  |  | ||||||
|     let lines =<< trim [CODE] |  | ||||||
|     " F1 |  | ||||||
|     func F1() |  | ||||||
|         " F2 |  | ||||||
|         func F2() |  | ||||||
|             " |  | ||||||
|             " |  | ||||||
|             " |  | ||||||
|             return |  | ||||||
|         endfunc |  | ||||||
|         " F3 |  | ||||||
|         execute "func F3()\n\n\n\nreturn\nendfunc" |  | ||||||
|         " F4 |  | ||||||
|         execute "func F4()\n |  | ||||||
|                     \\n |  | ||||||
|                     \\n |  | ||||||
|                     \\n |  | ||||||
|                     \return\n |  | ||||||
|                     \endfunc" |  | ||||||
|     endfunc |  | ||||||
|     " F5 |  | ||||||
|     execute "func F5()\n\n\n\nreturn\nendfunc" |  | ||||||
|     " F6 |  | ||||||
|     execute "func F6()\n |  | ||||||
|                 \\n |  | ||||||
|                 \\n |  | ||||||
|                 \\n |  | ||||||
|                 \return\n |  | ||||||
|                 \endfunc" |  | ||||||
|     call F1() |  | ||||||
|     verbose func F1 |  | ||||||
|     verbose func F2 |  | ||||||
|     verbose func F3 |  | ||||||
|     verbose func F4 |  | ||||||
|     verbose func F5 |  | ||||||
|     verbose func F6 |  | ||||||
|     qall! |  | ||||||
|     [CODE] |  | ||||||
|  |  | ||||||
|     call writefile(lines, 'Xtest.vim') |  | ||||||
|     let res = system(GetVimCommandClean() .. ' -es -X -S Xtest.vim') |  | ||||||
|     call assert_equal(0, v:shell_error) |  | ||||||
|  |  | ||||||
|     let m = matchstr(res, 'function F1()[^[:print:]]*[[:print:]]*') |  | ||||||
|     call assert_match(' line 2$', m) |  | ||||||
|  |  | ||||||
|     let m = matchstr(res, 'function F2()[^[:print:]]*[[:print:]]*') |  | ||||||
|     call assert_match(' line 4$', m) |  | ||||||
|  |  | ||||||
|     let m = matchstr(res, 'function F3()[^[:print:]]*[[:print:]]*') |  | ||||||
|     call assert_match(' line 11$', m) |  | ||||||
|  |  | ||||||
|     let m = matchstr(res, 'function F4()[^[:print:]]*[[:print:]]*') |  | ||||||
|     call assert_match(' line 13$', m) |  | ||||||
|  |  | ||||||
|     let m = matchstr(res, 'function F5()[^[:print:]]*[[:print:]]*') |  | ||||||
|     call assert_match(' line 21$', m) |  | ||||||
|  |  | ||||||
|     let m = matchstr(res, 'function F6()[^[:print:]]*[[:print:]]*') |  | ||||||
|     call assert_match(' line 23$', m) |  | ||||||
|  |  | ||||||
|     call delete('Xtest.vim') |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| " Test for missing :endif, :endfor, :endwhile and :endtry           {{{1 | " Test for missing :endif, :endfor, :endwhile and :endtry           {{{1 | ||||||
| func Test_missing_end() | func Test_missing_end() | ||||||
|   call writefile(['if 2 > 1', 'echo ">"'], 'Xscript') |   call writefile(['if 2 > 1', 'echo ">"'], 'Xscript') | ||||||
| @@ -1948,16 +1798,6 @@ func Test_deep_nest() | |||||||
|   call delete('Xscript') |   call delete('Xscript') | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| " Test for <sfile>, <slnum> in a function                           {{{1 |  | ||||||
| func Test_sfile_in_function() |  | ||||||
|   func Xfunc() |  | ||||||
|     call assert_match('..Test_sfile_in_function\[5]..Xfunc', expand('<sfile>')) |  | ||||||
|     call assert_equal('2', expand('<slnum>')) |  | ||||||
|   endfunc |  | ||||||
|   call Xfunc() |  | ||||||
|   delfunc Xfunc |  | ||||||
| endfunc |  | ||||||
|  |  | ||||||
| " Test for errors in converting to float from various types         {{{1 | " Test for errors in converting to float from various types         {{{1 | ||||||
| func Test_float_conversion_errors() | func Test_float_conversion_errors() | ||||||
|   if has('float') |   if has('float') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 zeertzjq
					zeertzjq