diff options
-rw-r--r-- | src/nvim/testdir/Makefile | 2 | ||||
-rw-r--r-- | src/nvim/testdir/test60.in | 611 | ||||
-rw-r--r-- | src/nvim/testdir/test60.ok | 211 | ||||
-rw-r--r-- | src/nvim/testdir/test60.vim | 98 | ||||
-rw-r--r-- | test/functional/fixtures/autoload/footest.vim | 5 | ||||
-rw-r--r-- | test/functional/legacy/060_exists_and_has_functions_spec.lua | 871 |
6 files changed, 877 insertions, 921 deletions
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile index f22cb79748..bc5b03727e 100644 --- a/src/nvim/testdir/Makefile +++ b/src/nvim/testdir/Makefile @@ -20,7 +20,7 @@ SCRIPTS := test_autoformat_join.out \ test42.out test43.out test45.out \ test46.out test47.out test48.out test49.out \ test52.out test53.out test55.out \ - test57.out test58.out test59.out test60.out \ + test57.out test58.out test59.out \ test61.out test62.out test63.out test64.out test65.out \ test68.out test69.out \ test71.out test73.out test74.out \ diff --git a/src/nvim/testdir/test60.in b/src/nvim/testdir/test60.in deleted file mode 100644 index d449e8d4da..0000000000 --- a/src/nvim/testdir/test60.in +++ /dev/null @@ -1,611 +0,0 @@ -Tests for the exists() and has() functions. vim: set ft=vim ts=8 sw=2 : - -STARTTEST -:so small.vim -:set wildchar=^E -:function! RunTest(str, result) - if exists(a:str) == a:result - echo "OK" - else - echo "FAILED: Checking for " . a:str - endif -endfunction -:function! TestExists() - augroup myagroup - autocmd! BufEnter *.my echo "myfile edited" - autocmd! FuncUndefined UndefFun exec "fu UndefFun()\nendfu" - augroup END - set rtp+=./sautest - - let test_cases = [] - - " valid autocmd group - let test_cases += [['#myagroup', 1]] - " valid autocmd group with garbage - let test_cases += [['#myagroup+b', 0]] - " Valid autocmd group and event - let test_cases += [['#myagroup#BufEnter', 1]] - " Valid autocmd group, event and pattern - let test_cases += [['#myagroup#BufEnter#*.my', 1]] - " Valid autocmd event - let test_cases += [['#BufEnter', 1]] - " Valid autocmd event and pattern - let test_cases += [['#BufEnter#*.my', 1]] - " Non-existing autocmd group or event - let test_cases += [['#xyzagroup', 0]] - " Non-existing autocmd group and valid autocmd event - let test_cases += [['#xyzagroup#BufEnter', 0]] - " Valid autocmd group and event with no matching pattern - let test_cases += [['#myagroup#CmdwinEnter', 0]] - " Valid autocmd group and non-existing autocmd event - let test_cases += [['#myagroup#xyzacmd', 0]] - " Valid autocmd group and event and non-matching pattern - let test_cases += [['#myagroup#BufEnter#xyzpat', 0]] - " Valid autocmd event and non-matching pattern - let test_cases += [['#BufEnter#xyzpat', 0]] - " Empty autocmd group, event and pattern - let test_cases += [['###', 0]] - " Empty autocmd group and event or empty event and pattern - let test_cases += [['##', 0]] - " Valid autocmd event - let test_cases += [['##FileReadCmd', 1]] - " Non-existing autocmd event - let test_cases += [['##MySpecialCmd', 0]] - - " Existing and working option (long form) - let test_cases += [['&textwidth', 1]] - " Existing and working option (short form) - let test_cases += [['&tw', 1]] - " Existing and working option with garbage - let test_cases += [['&tw-', 0]] - " Global option - let test_cases += [['&g:errorformat', 1]] - " Local option - let test_cases += [['&l:errorformat', 1]] - " Negative form of existing and working option (long form) - let test_cases += [['&nojoinspaces', 0]] - " Negative form of existing and working option (short form) - let test_cases += [['&nojs', 0]] - " Non-existing option - let test_cases += [['&myxyzoption', 0]] - - " Existing and working option (long form) - let test_cases += [['+incsearch', 1]] - " Existing and working option with garbage - let test_cases += [['+incsearch!1', 0]] - " Existing and working option (short form) - let test_cases += [['+is', 1]] - " Existing option that is hidden. - let test_cases += [['+mouseshape', 0]] - - " Existing environment variable - let $EDITOR_NAME = 'Vim Editor' - let test_cases += [['$EDITOR_NAME', 1]] - " Non-existing environment variable - let test_cases += [['$NON_ENV_VAR', 0]] - - " Valid internal function - let test_cases += [['*bufnr', 1]] - " Valid internal function with () - let test_cases += [['*bufnr()', 1]] - " Non-existing internal function - let test_cases += [['*myxyzfunc', 0]] - " Valid internal function with garbage - let test_cases += [['*bufnr&6', 0]] - - " Valid user defined function - let test_cases += [['*TestExists', 1]] - " Non-existing user defined function - let test_cases += [['*MyxyzFunc', 0]] - - " Function that may be created by FuncUndefined event - let test_cases += [['*UndefFun', 0]] - " Function that may be created by script autoloading - let test_cases += [['*footest#F', 0]] - - redir! > test.out - - for [test_case, result] in test_cases - echo test_case . ": " . result - call RunTest(test_case, result) - endfor - - " Valid internal command (full match) - echo ':edit: 2' - if exists(':edit') == 2 - echo "OK" - else - echo "FAILED" - endif - - " Valid internal command (full match) with garbage - echo ':edit/a: 0' - if exists(':edit/a') == 0 - echo "OK" - else - echo "FAILED" - endif - - " Valid internal command (partial match) - echo ':q: 1' - if exists(':q') == 1 - echo "OK" - else - echo "FAILED" - endif - - " Non-existing internal command - echo ':invalidcmd: 0' - if !exists(':invalidcmd') - echo "OK" - else - echo "FAILED" - endif - - " User defined command (full match) - command! MyCmd :echo 'My command' - echo ':MyCmd: 2' - if exists(':MyCmd') == 2 - echo "OK" - else - echo "FAILED" - endif - - " User defined command (partial match) - command! MyOtherCmd :echo 'Another command' - echo ':My: 3' - if exists(':My') == 3 - echo "OK" - else - echo "FAILED" - endif - - " Command modifier - echo ':rightbelow: 2' - if exists(':rightbelow') == 2 - echo "OK" - else - echo "FAILED" - endif - - " Non-existing user defined command (full match) - delcommand MyCmd - - echo ':MyCmd: 0' - if !exists(':MyCmd') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing user defined command (partial match) - delcommand MyOtherCmd - - echo ':My: 0' - if !exists(':My') - echo "OK" - else - echo "FAILED" - endif - - " Valid local variable - let local_var = 1 - echo 'local_var: 1' - if exists('local_var') - echo "OK" - else - echo "FAILED" - endif - - " Valid local variable with garbage - let local_var = 1 - echo 'local_var%n: 0' - if !exists('local_var%n') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing local variable - unlet local_var - echo 'local_var: 0' - if !exists('local_var') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing autoload variable that may be autoloaded - echo 'footest#x: 0' - if !exists('footest#x') - echo "OK" - else - echo "FAILED" - endif - - " Valid local list - let local_list = ["blue", "orange"] - echo 'local_list: 1' - if exists('local_list') - echo "OK" - else - echo "FAILED" - endif - - " Valid local list item - echo 'local_list[1]: 1' - if exists('local_list[1]') - echo "OK" - else - echo "FAILED" - endif - - " Valid local list item with garbage - echo 'local_list[1]+5: 0' - if !exists('local_list[1]+5') - echo "OK" - else - echo "FAILED" - endif - - " Invalid local list item - echo 'local_list[2]: 0' - if !exists('local_list[2]') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing local list - unlet local_list - echo 'local_list: 0' - if !exists('local_list') - echo "OK" - else - echo "FAILED" - endif - - " Valid local dictionary - let local_dict = {"xcord":100, "ycord":2} - echo 'local_dict: 1' - if exists('local_dict') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing local dictionary - unlet local_dict - echo 'local_dict: 0' - if !exists('local_dict') - echo "OK" - else - echo "FAILED" - endif - - " Existing local curly-brace variable - let str = "local" - let curly_{str}_var = 1 - echo 'curly_' . str . '_var: 1' - if exists('curly_{str}_var') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing local curly-brace variable - unlet curly_{str}_var - echo 'curly_' . str . '_var: 0' - if !exists('curly_{str}_var') - echo "OK" - else - echo "FAILED" - endif - - - " Existing global variable - let g:global_var = 1 - echo 'g:global_var: 1' - if exists('g:global_var') - echo "OK" - else - echo "FAILED" - endif - - " Existing global variable with garbage - echo 'g:global_var-n: 1' - if !exists('g:global_var-n') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing global variable - unlet g:global_var - echo 'g:global_var: 0' - if !exists('g:global_var') - echo "OK" - else - echo "FAILED" - endif - - " Existing global list - let g:global_list = ["blue", "orange"] - echo 'g:global_list: 1' - if exists('g:global_list') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing global list - unlet g:global_list - echo 'g:global_list: 0' - if !exists('g:global_list') - echo "OK" - else - echo "FAILED" - endif - - " Existing global dictionary - let g:global_dict = {"xcord":100, "ycord":2} - echo 'g:global_dict: 1' - if exists('g:global_dict') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing global dictionary - unlet g:global_dict - echo 'g:global_dict: 0' - if !exists('g:global_dict') - echo "OK" - else - echo "FAILED" - endif - - " Existing global curly-brace variable - let str = "global" - let g:curly_{str}_var = 1 - echo 'g:curly_' . str . '_var: 1' - if exists('g:curly_{str}_var') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing global curly-brace variable - unlet g:curly_{str}_var - echo 'g:curly_' . str . '_var: 0' - if !exists('g:curly_{str}_var') - echo "OK" - else - echo "FAILED" - endif - - " Existing window variable - echo 'w:window_var: 1' - let w:window_var = 1 - if exists('w:window_var') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing window variable - unlet w:window_var - echo 'w:window_var: 0' - if !exists('w:window_var') - echo "OK" - else - echo "FAILED" - endif - - " Existing window list - let w:window_list = ["blue", "orange"] - echo 'w:window_list: 1' - if exists('w:window_list') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing window list - unlet w:window_list - echo 'w:window_list: 0' - if !exists('w:window_list') - echo "OK" - else - echo "FAILED" - endif - - " Existing window dictionary - let w:window_dict = {"xcord":100, "ycord":2} - echo 'w:window_dict: 1' - if exists('w:window_dict') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing window dictionary - unlet w:window_dict - echo 'w:window_dict: 0' - if !exists('w:window_dict') - echo "OK" - else - echo "FAILED" - endif - - " Existing window curly-brace variable - let str = "window" - let w:curly_{str}_var = 1 - echo 'w:curly_' . str . '_var: 1' - if exists('w:curly_{str}_var') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing window curly-brace variable - unlet w:curly_{str}_var - echo 'w:curly_' . str . '_var: 0' - if !exists('w:curly_{str}_var') - echo "OK" - else - echo "FAILED" - endif - - " Existing buffer variable - echo 'b:buffer_var: 1' - let b:buffer_var = 1 - if exists('b:buffer_var') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing buffer variable - unlet b:buffer_var - echo 'b:buffer_var: 0' - if !exists('b:buffer_var') - echo "OK" - else - echo "FAILED" - endif - - " Existing buffer list - let b:buffer_list = ["blue", "orange"] - echo 'b:buffer_list: 1' - if exists('b:buffer_list') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing buffer list - unlet b:buffer_list - echo 'b:buffer_list: 0' - if !exists('b:buffer_list') - echo "OK" - else - echo "FAILED" - endif - - " Existing buffer dictionary - let b:buffer_dict = {"xcord":100, "ycord":2} - echo 'b:buffer_dict: 1' - if exists('b:buffer_dict') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing buffer dictionary - unlet b:buffer_dict - echo 'b:buffer_dict: 0' - if !exists('b:buffer_dict') - echo "OK" - else - echo "FAILED" - endif - - " Existing buffer curly-brace variable - let str = "buffer" - let b:curly_{str}_var = 1 - echo 'b:curly_' . str . '_var: 1' - if exists('b:curly_{str}_var') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing buffer curly-brace variable - unlet b:curly_{str}_var - echo 'b:curly_' . str . '_var: 0' - if !exists('b:curly_{str}_var') - echo "OK" - else - echo "FAILED" - endif - - " Script-local tests - source test60.vim - - " Existing Vim internal variable - echo 'v:version: 1' - if exists('v:version') - echo "OK" - else - echo "FAILED" - endif - - " Non-existing Vim internal variable - echo 'v:non_exists_var: 0' - if !exists('v:non_exists_var') - echo "OK" - else - echo "FAILED" - endif - - " Function arguments - function TestFuncArg(func_arg, ...) - echo 'a:func_arg: 1' - if exists('a:func_arg') - echo "OK" - else - echo "FAILED" - endif - - echo 'a:non_exists_arg: 0' - if !exists('a:non_exists_arg') - echo "OK" - else - echo "FAILED" - endif - - echo 'a:1: 1' - if exists('a:1') - echo "OK" - else - echo "FAILED" - endif - - echo 'a:2: 0' - if !exists('a:2') - echo "OK" - else - echo "FAILED" - endif - endfunction - - call TestFuncArg("arg1", "arg2") - - echo ' g:footest#x =' g:footest#x - echo ' footest#F()' footest#F() - echo 'UndefFun()' UndefFun() - - redir END -endfunction -:call TestExists() -:" -:function TestHas() - redir >> test.out - for pl in ['6.9.999', '7.1.999', '7.4.123', '9.1.0', '9.9.1'] - echo 'has patch ' . pl . ': ' . has('patch-' . pl) - endfor - redir END -endfunc -:call TestHas() -:" -:delfunc TestExists -:delfunc RunTest -:delfunc TestFuncArg -:edit! test.out -:set ff=unix -:w -:qa! -:while getchar(1) | call getchar() | endwhile -ENDTEST - diff --git a/src/nvim/testdir/test60.ok b/src/nvim/testdir/test60.ok deleted file mode 100644 index 39bc245bc4..0000000000 --- a/src/nvim/testdir/test60.ok +++ /dev/null @@ -1,211 +0,0 @@ - -#myagroup: 1 -OK -#myagroup+b: 0 -OK -#myagroup#BufEnter: 1 -OK -#myagroup#BufEnter#*.my: 1 -OK -#BufEnter: 1 -OK -#BufEnter#*.my: 1 -OK -#xyzagroup: 0 -OK -#xyzagroup#BufEnter: 0 -OK -#myagroup#CmdwinEnter: 0 -OK -#myagroup#xyzacmd: 0 -OK -#myagroup#BufEnter#xyzpat: 0 -OK -#BufEnter#xyzpat: 0 -OK -###: 0 -OK -##: 0 -OK -##FileReadCmd: 1 -OK -##MySpecialCmd: 0 -OK -&textwidth: 1 -OK -&tw: 1 -OK -&tw-: 0 -OK -&g:errorformat: 1 -OK -&l:errorformat: 1 -OK -&nojoinspaces: 0 -OK -&nojs: 0 -OK -&myxyzoption: 0 -OK -+incsearch: 1 -OK -+incsearch!1: 0 -OK -+is: 1 -OK -+mouseshape: 0 -OK -$EDITOR_NAME: 1 -OK -$NON_ENV_VAR: 0 -OK -*bufnr: 1 -OK -*bufnr(): 1 -OK -*myxyzfunc: 0 -OK -*bufnr&6: 0 -OK -*TestExists: 1 -OK -*MyxyzFunc: 0 -OK -*UndefFun: 0 -OK -*footest#F: 0 -OK -:edit: 2 -OK -:edit/a: 0 -OK -:q: 1 -OK -:invalidcmd: 0 -OK -:MyCmd: 2 -OK -:My: 3 -OK -:rightbelow: 2 -OK -:MyCmd: 0 -OK -:My: 0 -OK -local_var: 1 -OK -local_var%n: 0 -OK -local_var: 0 -OK -footest#x: 0 -OK -local_list: 1 -OK -local_list[1]: 1 -OK -local_list[1]+5: 0 -OK -local_list[2]: 0 -OK -local_list: 0 -OK -local_dict: 1 -OK -local_dict: 0 -OK -curly_local_var: 1 -OK -curly_local_var: 0 -OK -g:global_var: 1 -OK -g:global_var-n: 1 -OK -g:global_var: 0 -OK -g:global_list: 1 -OK -g:global_list: 0 -OK -g:global_dict: 1 -OK -g:global_dict: 0 -OK -g:curly_global_var: 1 -OK -g:curly_global_var: 0 -OK -w:window_var: 1 -OK -w:window_var: 0 -OK -w:window_list: 1 -OK -w:window_list: 0 -OK -w:window_dict: 1 -OK -w:window_dict: 0 -OK -w:curly_window_var: 1 -OK -w:curly_window_var: 0 -OK -b:buffer_var: 1 -OK -b:buffer_var: 0 -OK -b:buffer_list: 1 -OK -b:buffer_list: 0 -OK -b:buffer_dict: 1 -OK -b:buffer_dict: 0 -OK -b:curly_buffer_var: 1 -OK -b:curly_buffer_var: 0 -OK -s:script_var: 1 -OK -s:script_var: 0 -OK -s:script_list: 1 -OK -s:script_list: 0 -OK -s:script_dict: 1 -OK -s:script_dict: 0 -OK -s:curly_script_var: 1 -OK -s:curly_script_var: 0 -OK -*s:my_script_func: 1 -OK -*s:my_script_func: 0 -OK -v:version: 1 -OK -v:non_exists_var: 0 -OK -a:func_arg: 1 -OK -a:non_exists_arg: 0 -OK -a:1: 1 -OK -a:2: 0 -OK - g:footest#x = 1 - footest#F() 0 -UndefFun() 0 -has patch 6.9.999: 1 -has patch 7.1.999: 1 -has patch 7.4.123: 1 -has patch 9.1.0: 0 -has patch 9.9.1: 0 diff --git a/src/nvim/testdir/test60.vim b/src/nvim/testdir/test60.vim deleted file mode 100644 index f1157f73f9..0000000000 --- a/src/nvim/testdir/test60.vim +++ /dev/null @@ -1,98 +0,0 @@ -" Vim script for exists() function test -" Script-local variables are checked here - -" Existing script-local variable -let s:script_var = 1 -echo 's:script_var: 1' -if exists('s:script_var') - echo "OK" -else - echo "FAILED" -endif - -" Non-existing script-local variable -unlet s:script_var -echo 's:script_var: 0' -if !exists('s:script_var') - echo "OK" -else - echo "FAILED" -endif - -" Existing script-local list -let s:script_list = ["blue", "orange"] -echo 's:script_list: 1' -if exists('s:script_list') - echo "OK" -else - echo "FAILED" -endif - -" Non-existing script-local list -unlet s:script_list -echo 's:script_list: 0' -if !exists('s:script_list') - echo "OK" -else - echo "FAILED" -endif - -" Existing script-local dictionary -let s:script_dict = {"xcord":100, "ycord":2} -echo 's:script_dict: 1' -if exists('s:script_dict') - echo "OK" -else - echo "FAILED" -endif - -" Non-existing script-local dictionary -unlet s:script_dict -echo 's:script_dict: 0' -if !exists('s:script_dict') - echo "OK" -else - echo "FAILED" -endif - -" Existing script curly-brace variable -let str = "script" -let s:curly_{str}_var = 1 -echo 's:curly_' . str . '_var: 1' -if exists('s:curly_{str}_var') - echo "OK" -else - echo "FAILED" -endif - -" Non-existing script-local curly-brace variable -unlet s:curly_{str}_var -echo 's:curly_' . str . '_var: 0' -if !exists('s:curly_{str}_var') - echo "OK" -else - echo "FAILED" -endif - -" Existing script-local function -function! s:my_script_func() -endfunction - -echo '*s:my_script_func: 1' -if exists('*s:my_script_func') - echo "OK" -else - echo "FAILED" -endif - -" Non-existing script-local function -delfunction s:my_script_func - -echo '*s:my_script_func: 0' -if !exists('*s:my_script_func') - echo "OK" -else - echo "FAILED" -endif -unlet str - diff --git a/test/functional/fixtures/autoload/footest.vim b/test/functional/fixtures/autoload/footest.vim new file mode 100644 index 0000000000..f467bc376d --- /dev/null +++ b/test/functional/fixtures/autoload/footest.vim @@ -0,0 +1,5 @@ +" Autoload script used by test55 and test60 +let footest#x = 1 +func footest#F() + return 0 +endfunc diff --git a/test/functional/legacy/060_exists_and_has_functions_spec.lua b/test/functional/legacy/060_exists_and_has_functions_spec.lua new file mode 100644 index 0000000000..d30f83dc6d --- /dev/null +++ b/test/functional/legacy/060_exists_and_has_functions_spec.lua @@ -0,0 +1,871 @@ +-- Tests for the exists() and has() functions. ts=8 sw=2 + +local helpers = require('test.functional.helpers') +local feed, insert, source = helpers.feed, helpers.insert, helpers.source +local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect +local os = require('os') + +describe('exists() and has() functions', function() + setup(clear) + + it('is working', function() + + -- Create a temporary script needed for the test. + local script = io.open('test60.vim', 'w') + script:write(helpers.dedent([=[ + " Vim script for exists() function test + " Script-local variables are checked here + + " Existing script-local variable + let s:script_var = 1 + echo 's:script_var: 1' + if exists('s:script_var') + echo "OK" + else + echo "FAILED" + endif + + " Non-existing script-local variable + unlet s:script_var + echo 's:script_var: 0' + if !exists('s:script_var') + echo "OK" + else + echo "FAILED" + endif + + " Existing script-local list + let s:script_list = ["blue", "orange"] + echo 's:script_list: 1' + if exists('s:script_list') + echo "OK" + else + echo "FAILED" + endif + + " Non-existing script-local list + unlet s:script_list + echo 's:script_list: 0' + if !exists('s:script_list') + echo "OK" + else + echo "FAILED" + endif + + " Existing script-local dictionary + let s:script_dict = {"xcord":100, "ycord":2} + echo 's:script_dict: 1' + if exists('s:script_dict') + echo "OK" + else + echo "FAILED" + endif + + " Non-existing script-local dictionary + unlet s:script_dict + echo 's:script_dict: 0' + if !exists('s:script_dict') + echo "OK" + else + echo "FAILED" + endif + + " Existing script curly-brace variable + let str = "script" + let s:curly_{str}_var = 1 + echo 's:curly_' . str . '_var: 1' + if exists('s:curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + + " Non-existing script-local curly-brace variable + unlet s:curly_{str}_var + echo 's:curly_' . str . '_var: 0' + if !exists('s:curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + + " Existing script-local function + function! s:my_script_func() + endfunction + + echo '*s:my_script_func: 1' + if exists('*s:my_script_func') + echo "OK" + else + echo "FAILED" + endif + + " Non-existing script-local function + delfunction s:my_script_func + + echo '*s:my_script_func: 0' + if !exists('*s:my_script_func') + echo "OK" + else + echo "FAILED" + endif + unlet str + ]=])) + script:flush() + script:close() + + source([=[ + " Add the special directory with test scripts to &rtp + set rtp+=test/functional/fixtures + set wildchar=^E + function! RunTest(str, result) + if exists(a:str) == a:result + echo "OK" + else + echo "FAILED: Checking for " . a:str + endif + endfunction + function! TestExists() + augroup myagroup + autocmd! BufEnter *.my echo "myfile edited" + autocmd! FuncUndefined UndefFun exec "fu UndefFun()\nendfu" + augroup END + set rtp+=./sautest + let test_cases = [] + " Valid autocmd group. + let test_cases += [['#myagroup', 1]] + " Valid autocmd group with garbage. + let test_cases += [['#myagroup+b', 0]] + " Valid autocmd group and event. + let test_cases += [['#myagroup#BufEnter', 1]] + " Valid autocmd group, event and pattern. + let test_cases += [['#myagroup#BufEnter#*.my', 1]] + " Valid autocmd event. + let test_cases += [['#BufEnter', 1]] + " Valid autocmd event and pattern. + let test_cases += [['#BufEnter#*.my', 1]] + " Non-existing autocmd group or event. + let test_cases += [['#xyzagroup', 0]] + " Non-existing autocmd group and valid autocmd event. + let test_cases += [['#xyzagroup#BufEnter', 0]] + " Valid autocmd group and event with no matching pattern. + let test_cases += [['#myagroup#CmdwinEnter', 0]] + " Valid autocmd group and non-existing autocmd event. + let test_cases += [['#myagroup#xyzacmd', 0]] + " Valid autocmd group and event and non-matching pattern. + let test_cases += [['#myagroup#BufEnter#xyzpat', 0]] + " Valid autocmd event and non-matching pattern. + let test_cases += [['#BufEnter#xyzpat', 0]] + " Empty autocmd group, event and pattern. + let test_cases += [['###', 0]] + " Empty autocmd group and event or empty event and pattern. + let test_cases += [['##', 0]] + " Valid autocmd event. + let test_cases += [['##FileReadCmd', 1]] + " Non-existing autocmd event. + let test_cases += [['##MySpecialCmd', 0]] + " Existing and working option (long form). + let test_cases += [['&textwidth', 1]] + " Existing and working option (short form). + let test_cases += [['&tw', 1]] + " Existing and working option with garbage. + let test_cases += [['&tw-', 0]] + " Global option. + let test_cases += [['&g:errorformat', 1]] + " Local option. + let test_cases += [['&l:errorformat', 1]] + " Negative form of existing and working option (long form). + let test_cases += [['&nojoinspaces', 0]] + " Negative form of existing and working option (short form). + let test_cases += [['&nojs', 0]] + " Non-existing option. + let test_cases += [['&myxyzoption', 0]] + " Existing and working option (long form). + let test_cases += [['+incsearch', 1]] + " Existing and working option with garbage. + let test_cases += [['+incsearch!1', 0]] + " Existing and working option (short form). + let test_cases += [['+is', 1]] + " Existing option that is hidden. + let test_cases += [['+mouseshape', 0]] + " Existing environment variable. + let $EDITOR_NAME = 'Vim Editor' + let test_cases += [['$EDITOR_NAME', 1]] + " Non-existing environment variable. + let test_cases += [['$NON_ENV_VAR', 0]] + " Valid internal function. + let test_cases += [['*bufnr', 1]] + " Valid internal function with (). + let test_cases += [['*bufnr()', 1]] + " Non-existing internal function. + let test_cases += [['*myxyzfunc', 0]] + " Valid internal function with garbage. + let test_cases += [['*bufnr&6', 0]] + " Valid user defined function. + let test_cases += [['*TestExists', 1]] + " Non-existing user defined function. + let test_cases += [['*MyxyzFunc', 0]] + " Function that may be created by FuncUndefined event. + let test_cases += [['*UndefFun', 0]] + " Function that may be created by script autoloading. + let test_cases += [['*footest#F', 0]] + redir! > test.out + for [test_case, result] in test_cases + echo test_case . ": " . result + call RunTest(test_case, result) + endfor + " Valid internal command (full match). + echo ':edit: 2' + if exists(':edit') == 2 + echo "OK" + else + echo "FAILED" + endif + " Valid internal command (full match) with garbage. + echo ':edit/a: 0' + if exists(':edit/a') == 0 + echo "OK" + else + echo "FAILED" + endif + " Valid internal command (partial match). + echo ':q: 1' + if exists(':q') == 1 + echo "OK" + else + echo "FAILED" + endif + " Non-existing internal command. + echo ':invalidcmd: 0' + if !exists(':invalidcmd') + echo "OK" + else + echo "FAILED" + endif + " User defined command (full match). + command! MyCmd :echo 'My command' + echo ':MyCmd: 2' + if exists(':MyCmd') == 2 + echo "OK" + else + echo "FAILED" + endif + " User defined command (partial match). + command! MyOtherCmd :echo 'Another command' + echo ':My: 3' + if exists(':My') == 3 + echo "OK" + else + echo "FAILED" + endif + " Command modifier. + echo ':rightbelow: 2' + if exists(':rightbelow') == 2 + echo "OK" + else + echo "FAILED" + endif + " Non-existing user defined command (full match). + delcommand MyCmd + echo ':MyCmd: 0' + if !exists(':MyCmd') + echo "OK" + else + echo "FAILED" + endif + " Non-existing user defined command (partial match). + delcommand MyOtherCmd + echo ':My: 0' + if !exists(':My') + echo "OK" + else + echo "FAILED" + endif + " Valid local variable. + let local_var = 1 + echo 'local_var: 1' + if exists('local_var') + echo "OK" + else + echo "FAILED" + endif + " Valid local variable with garbage. + let local_var = 1 + echo 'local_var%n: 0' + if !exists('local_var%n') + echo "OK" + else + echo "FAILED" + endif + " Non-existing local variable. + unlet local_var + echo 'local_var: 0' + if !exists('local_var') + echo "OK" + else + echo "FAILED" + endif + " Non-existing autoload variable that may be autoloaded. + echo 'footest#x: 0' + if !exists('footest#x') + echo "OK" + else + echo "FAILED" + endif + " Valid local list. + let local_list = ["blue", "orange"] + echo 'local_list: 1' + if exists('local_list') + echo "OK" + else + echo "FAILED" + endif + " Valid local list item. + echo 'local_list[1]: 1' + if exists('local_list[1]') + echo "OK" + else + echo "FAILED" + endif + " Valid local list item with garbage. + echo 'local_list[1]+5: 0' + if !exists('local_list[1]+5') + echo "OK" + else + echo "FAILED" + endif + " Invalid local list item. + echo 'local_list[2]: 0' + if !exists('local_list[2]') + echo "OK" + else + echo "FAILED" + endif + " Non-existing local list. + unlet local_list + echo 'local_list: 0' + if !exists('local_list') + echo "OK" + else + echo "FAILED" + endif + " Valid local dictionary. + let local_dict = {"xcord":100, "ycord":2} + echo 'local_dict: 1' + if exists('local_dict') + echo "OK" + else + echo "FAILED" + endif + " Non-existing local dictionary. + unlet local_dict + echo 'local_dict: 0' + if !exists('local_dict') + echo "OK" + else + echo "FAILED" + endif + " Existing local curly-brace variable. + let str = "local" + let curly_{str}_var = 1 + echo 'curly_' . str . '_var: 1' + if exists('curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + " Non-existing local curly-brace variable. + unlet curly_{str}_var + echo 'curly_' . str . '_var: 0' + if !exists('curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + " Existing global variable. + let g:global_var = 1 + echo 'g:global_var: 1' + if exists('g:global_var') + echo "OK" + else + echo "FAILED" + endif + " Existing global variable with garbage. + echo 'g:global_var-n: 1' + if !exists('g:global_var-n') + echo "OK" + else + echo "FAILED" + endif + " Non-existing global variable. + unlet g:global_var + echo 'g:global_var: 0' + if !exists('g:global_var') + echo "OK" + else + echo "FAILED" + endif + " Existing global list. + let g:global_list = ["blue", "orange"] + echo 'g:global_list: 1' + if exists('g:global_list') + echo "OK" + else + echo "FAILED" + endif + " Non-existing global list. + unlet g:global_list + echo 'g:global_list: 0' + if !exists('g:global_list') + echo "OK" + else + echo "FAILED" + endif + " Existing global dictionary. + let g:global_dict = {"xcord":100, "ycord":2} + echo 'g:global_dict: 1' + if exists('g:global_dict') + echo "OK" + else + echo "FAILED" + endif + " Non-existing global dictionary. + unlet g:global_dict + echo 'g:global_dict: 0' + if !exists('g:global_dict') + echo "OK" + else + echo "FAILED" + endif + " Existing global curly-brace variable. + let str = "global" + let g:curly_{str}_var = 1 + echo 'g:curly_' . str . '_var: 1' + if exists('g:curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + " Non-existing global curly-brace variable. + unlet g:curly_{str}_var + echo 'g:curly_' . str . '_var: 0' + if !exists('g:curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + " Existing window variable. + echo 'w:window_var: 1' + let w:window_var = 1 + if exists('w:window_var') + echo "OK" + else + echo "FAILED" + endif + " Non-existing window variable. + unlet w:window_var + echo 'w:window_var: 0' + if !exists('w:window_var') + echo "OK" + else + echo "FAILED" + endif + " Existing window list. + let w:window_list = ["blue", "orange"] + echo 'w:window_list: 1' + if exists('w:window_list') + echo "OK" + else + echo "FAILED" + endif + " Non-existing window list. + unlet w:window_list + echo 'w:window_list: 0' + if !exists('w:window_list') + echo "OK" + else + echo "FAILED" + endif + " Existing window dictionary. + let w:window_dict = {"xcord":100, "ycord":2} + echo 'w:window_dict: 1' + if exists('w:window_dict') + echo "OK" + else + echo "FAILED" + endif + " Non-existing window dictionary. + unlet w:window_dict + echo 'w:window_dict: 0' + if !exists('w:window_dict') + echo "OK" + else + echo "FAILED" + endif + " Existing window curly-brace variable. + let str = "window" + let w:curly_{str}_var = 1 + echo 'w:curly_' . str . '_var: 1' + if exists('w:curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + " Non-existing window curly-brace variable. + unlet w:curly_{str}_var + echo 'w:curly_' . str . '_var: 0' + if !exists('w:curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + " Existing buffer variable. + echo 'b:buffer_var: 1' + let b:buffer_var = 1 + if exists('b:buffer_var') + echo "OK" + else + echo "FAILED" + endif + " Non-existing buffer variable. + unlet b:buffer_var + echo 'b:buffer_var: 0' + if !exists('b:buffer_var') + echo "OK" + else + echo "FAILED" + endif + " Existing buffer list. + let b:buffer_list = ["blue", "orange"] + echo 'b:buffer_list: 1' + if exists('b:buffer_list') + echo "OK" + else + echo "FAILED" + endif + " Non-existing buffer list. + unlet b:buffer_list + echo 'b:buffer_list: 0' + if !exists('b:buffer_list') + echo "OK" + else + echo "FAILED" + endif + " Existing buffer dictionary. + let b:buffer_dict = {"xcord":100, "ycord":2} + echo 'b:buffer_dict: 1' + if exists('b:buffer_dict') + echo "OK" + else + echo "FAILED" + endif + " Non-existing buffer dictionary. + unlet b:buffer_dict + echo 'b:buffer_dict: 0' + if !exists('b:buffer_dict') + echo "OK" + else + echo "FAILED" + endif + " Existing buffer curly-brace variable. + let str = "buffer" + let b:curly_{str}_var = 1 + echo 'b:curly_' . str . '_var: 1' + if exists('b:curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + " Non-existing buffer curly-brace variable. + unlet b:curly_{str}_var + echo 'b:curly_' . str . '_var: 0' + if !exists('b:curly_{str}_var') + echo "OK" + else + echo "FAILED" + endif + " Script-local tests. + source test60.vim + " Existing Vim internal variable. + echo 'v:version: 1' + if exists('v:version') + echo "OK" + else + echo "FAILED" + endif + " Non-existing Vim internal variable. + echo 'v:non_exists_var: 0' + if !exists('v:non_exists_var') + echo "OK" + else + echo "FAILED" + endif + " Function arguments. + function TestFuncArg(func_arg, ...) + echo 'a:func_arg: 1' + if exists('a:func_arg') + echo "OK" + else + echo "FAILED" + endif + echo 'a:non_exists_arg: 0' + if !exists('a:non_exists_arg') + echo "OK" + else + echo "FAILED" + endif + echo 'a:1: 1' + if exists('a:1') + echo "OK" + else + echo "FAILED" + endif + echo 'a:2: 0' + if !exists('a:2') + echo "OK" + else + echo "FAILED" + endif + endfunction + call TestFuncArg("arg1", "arg2") + echo ' g:footest#x =' g:footest#x + echo ' footest#F()' footest#F() + echo 'UndefFun()' UndefFun() + redir END + endfunction + + call TestExists() + + function TestHas() + redir >> test.out + for pl in ['6.9.999', '7.1.999', '7.4.123', '9.1.0', '9.9.1'] + echo 'has patch ' . pl . ': ' . has('patch-' . pl) + endfor + redir END + endfunc + call TestHas() + + edit! test.out + set ff=unix + ]=]) + + -- Assert buffer contents. + expect([=[ + + #myagroup: 1 + OK + #myagroup+b: 0 + OK + #myagroup#BufEnter: 1 + OK + #myagroup#BufEnter#*.my: 1 + OK + #BufEnter: 1 + OK + #BufEnter#*.my: 1 + OK + #xyzagroup: 0 + OK + #xyzagroup#BufEnter: 0 + OK + #myagroup#CmdwinEnter: 0 + OK + #myagroup#xyzacmd: 0 + OK + #myagroup#BufEnter#xyzpat: 0 + OK + #BufEnter#xyzpat: 0 + OK + ###: 0 + OK + ##: 0 + OK + ##FileReadCmd: 1 + OK + ##MySpecialCmd: 0 + OK + &textwidth: 1 + OK + &tw: 1 + OK + &tw-: 0 + OK + &g:errorformat: 1 + OK + &l:errorformat: 1 + OK + &nojoinspaces: 0 + OK + &nojs: 0 + OK + &myxyzoption: 0 + OK + +incsearch: 1 + OK + +incsearch!1: 0 + OK + +is: 1 + OK + +mouseshape: 0 + OK + $EDITOR_NAME: 1 + OK + $NON_ENV_VAR: 0 + OK + *bufnr: 1 + OK + *bufnr(): 1 + OK + *myxyzfunc: 0 + OK + *bufnr&6: 0 + OK + *TestExists: 1 + OK + *MyxyzFunc: 0 + OK + *UndefFun: 0 + OK + *footest#F: 0 + OK + :edit: 2 + OK + :edit/a: 0 + OK + :q: 1 + OK + :invalidcmd: 0 + OK + :MyCmd: 2 + OK + :My: 3 + OK + :rightbelow: 2 + OK + :MyCmd: 0 + OK + :My: 0 + OK + local_var: 1 + OK + local_var%n: 0 + OK + local_var: 0 + OK + footest#x: 0 + OK + local_list: 1 + OK + local_list[1]: 1 + OK + local_list[1]+5: 0 + OK + local_list[2]: 0 + OK + local_list: 0 + OK + local_dict: 1 + OK + local_dict: 0 + OK + curly_local_var: 1 + OK + curly_local_var: 0 + OK + g:global_var: 1 + OK + g:global_var-n: 1 + OK + g:global_var: 0 + OK + g:global_list: 1 + OK + g:global_list: 0 + OK + g:global_dict: 1 + OK + g:global_dict: 0 + OK + g:curly_global_var: 1 + OK + g:curly_global_var: 0 + OK + w:window_var: 1 + OK + w:window_var: 0 + OK + w:window_list: 1 + OK + w:window_list: 0 + OK + w:window_dict: 1 + OK + w:window_dict: 0 + OK + w:curly_window_var: 1 + OK + w:curly_window_var: 0 + OK + b:buffer_var: 1 + OK + b:buffer_var: 0 + OK + b:buffer_list: 1 + OK + b:buffer_list: 0 + OK + b:buffer_dict: 1 + OK + b:buffer_dict: 0 + OK + b:curly_buffer_var: 1 + OK + b:curly_buffer_var: 0 + OK + s:script_var: 1 + OK + s:script_var: 0 + OK + s:script_list: 1 + OK + s:script_list: 0 + OK + s:script_dict: 1 + OK + s:script_dict: 0 + OK + s:curly_script_var: 1 + OK + s:curly_script_var: 0 + OK + *s:my_script_func: 1 + OK + *s:my_script_func: 0 + OK + v:version: 1 + OK + v:non_exists_var: 0 + OK + a:func_arg: 1 + OK + a:non_exists_arg: 0 + OK + a:1: 1 + OK + a:2: 0 + OK + g:footest#x = 1 + footest#F() 0 + UndefFun() 0 + has patch 6.9.999: 1 + has patch 7.1.999: 1 + has patch 7.4.123: 1 + has patch 9.1.0: 0 + has patch 9.9.1: 0]=]) + + end) + teardown(function() + os.remove('test.out') + os.remove('test60.vim') + end) +end) |