Tests for the exists() function.  vim: set ft=vim :

STARTTEST
:so small.vim
: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'
    augroup END

    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 += [['+autoprint', 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]]

    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

    " 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")

    redir END
endfunction
:call TestExists()
:delfunc TestExists
:delfunc RunTest
:delfunc TestFuncArg
:edit! test.out
:set ff=unix
:w
:qa!
ENDTEST

