summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-10-12 21:29:22 +0200
committerBram Moolenaar <Bram@vim.org>2017-10-12 21:29:22 +0200
commit4a6fcf8047de13c7949ab2f27f7774acaec4ae4d (patch)
treec408cb0119bffbc2028c9a026eddbf5aa1212913
parent9202162c5c069c925b6b9bf84e546fbd362cdf46 (diff)
downloadvim-git-4a6fcf8047de13c7949ab2f27f7774acaec4ae4d.tar.gz
patch 8.0.1186: still quite a few old style testsv8.0.1186
Problem: Still quite a few old style tests. Solution: Convert old to new style tests. (Yegappan Lakshmanan) Avoid ringing the bell while running tests.
-rw-r--r--src/Makefile10
-rw-r--r--src/testdir/Make_all.mak10
-rw-r--r--src/testdir/Make_ming.mak2
-rw-r--r--src/testdir/Make_vms.mms10
-rw-r--r--src/testdir/main.aap6
-rw-r--r--src/testdir/runtest.vim3
-rw-r--r--src/testdir/test31.in95
-rw-r--r--src/testdir/test31.ok14
-rw-r--r--src/testdir/test4.in34
-rw-r--r--src/testdir/test4.ok20
-rw-r--r--src/testdir/test5.in29
-rw-r--r--src/testdir/test5.ok9
-rw-r--r--src/testdir/test60.in601
-rw-r--r--src/testdir/test60.ok206
-rw-r--r--src/testdir/test60.vim98
-rw-r--r--src/testdir/test7.in26
-rw-r--r--src/testdir/test7.ok12
-rw-r--r--src/testdir/test78.in46
-rw-r--r--src/testdir/test78.ok3
-rw-r--r--src/testdir/test_autocmd.vim133
-rw-r--r--src/testdir/test_exists.vim321
-rw-r--r--src/testdir/test_recover.vim46
-rw-r--r--src/testdir/test_winbuf_close.vim124
-rw-r--r--src/version.c2
24 files changed, 643 insertions, 1217 deletions
diff --git a/src/Makefile b/src/Makefile
index 06204bddb..7752fa17e 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2100,14 +2100,14 @@ test1 \
test_listchars \
test_search_mbyte \
test_wordcount \
- test3 test4 test5 test7 test8 \
+ test3 test8 \
test11 test12 test14 test15 test17 test19 \
test20 test25 test28 test29 \
- test30 test31 test32 test34 test36 test37 test38 test39 \
+ test30 test32 test34 test36 test37 test38 test39 \
test40 test42 test44 test45 test48 test49 \
test50 test52 test54 test55 test59 \
- test60 test64 test66 test68 test69 \
- test70 test72 test73 test77 test78 test79 \
+ test64 test66 test68 test69 \
+ test70 test72 test73 test77 test79 \
test83 test85 test86 test87 test88 \
test94 test95 test99 \
test108:
@@ -2149,6 +2149,7 @@ test_arglist \
test_ex_z \
test_exec_while_if \
test_execute_func \
+ test_exists \
test_exists_autocmd \
test_expand \
test_expand_dllpath \
@@ -2279,6 +2280,7 @@ test_arglist \
test_virtualedit \
test_visual \
test_winbar \
+ test_winbuf_close \
test_window_cmd \
test_window_id \
test_windows_home \
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index e27ee9346..eb13761d2 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -14,9 +14,6 @@ SCRIPTS_FIRST = \
# Tests that run on all systems.
SCRIPTS_ALL = \
test3.out \
- test4.out \
- test5.out \
- test7.out \
test8.out \
test14.out \
test15.out \
@@ -24,7 +21,6 @@ SCRIPTS_ALL = \
test20.out \
test28.out \
test29.out \
- test31.out \
test34.out \
test36.out \
test37.out \
@@ -36,7 +32,6 @@ SCRIPTS_ALL = \
test45.out \
test48.out \
test55.out \
- test60.out \
test64.out \
test66.out \
test68.out \
@@ -89,7 +84,6 @@ SCRIPTS_MORE4 = \
test32.out \
test59.out \
test72.out \
- test78.out \
test83.out
@@ -125,6 +119,7 @@ NEW_TESTS = test_arabic.res \
test_digraph.res \
test_display.res \
test_edit.res \
+ test_exists.res \
test_farsi.res \
test_file_size.res \
test_fnameescape.res \
@@ -196,6 +191,7 @@ NEW_TESTS = test_arabic.res \
test_vimscript.res \
test_visual.res \
test_winbar.res \
+ test_winbuf_close.res \
test_window_id.res \
test_windows_home.res \
test_writefile.res \
@@ -207,6 +203,4 @@ NEW_TESTS = test_arabic.res \
# Explicit dependencies.
test49.out: test49.vim
-test60.out: test60.vim
-
test_options.res test_alot.res: opt_test.vim
diff --git a/src/testdir/Make_ming.mak b/src/testdir/Make_ming.mak
index c5a5dc01d..ecfa97e4c 100644
--- a/src/testdir/Make_ming.mak
+++ b/src/testdir/Make_ming.mak
@@ -68,7 +68,7 @@ win32: fixff nolog $(SCRIPTS_FIRST) $(SCRIPTS) $(SCRIPTS_WIN32) newtests
fixff:
-$(VIMPROG) -u dos.vim $(NO_INITS) "+argdo set ff=dos|upd" +q *.in *.ok
-$(VIMPROG) -u dos.vim $(NO_INITS) "+argdo set ff=unix|upd" +q \
- dotest.in test60.ok test_listchars.ok \
+ dotest.in test_listchars.ok \
test_wordcount.ok
clean:
diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms
index 5d7770d33..efed68f9c 100644
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -73,20 +73,20 @@ VIMPROG = <->vim.exe
.SUFFIXES : .out .in
-SCRIPT = test1.out test3.out test4.out test5.out \
- test7.out test8.out \
+SCRIPT = test1.out test3.out \
+ test8.out \
test14.out test15.out \
test19.out test20.out \
- test28.out test29.out test30.out test31.out test32.out \
+ test28.out test29.out test30.out test32.out \
test34.out test36.out test37.out \
test38.out test39.out test40.out test42.out \
test44.out test45.out \
test48.out test49.out test54.out \
- test55.out test60.out \
+ test55.out \
test64.out \
test66.out test68.out test69.out \
test72.out \
- test77a.out test78.out test79.out \
+ test77a.out test79.out \
test88.out \
test94.out \
test95.out test99.out \
diff --git a/src/testdir/main.aap b/src/testdir/main.aap
index eb80a81f0..54f7eb256 100644
--- a/src/testdir/main.aap
+++ b/src/testdir/main.aap
@@ -4,12 +4,12 @@
VimProg ?= ../vim
-Scripts = test1.out test2.out test3.out test4.out test5.out test6.out
- test7.out test8.out test11.out
+Scripts = test1.out test2.out test3.out test6.out
+ test8.out test11.out
test12.out test13.out test14.out test15.out test17.out
test18.out test19.out test20.out test21.out
test25.out test27.out
- test28.out test29.out test30.out test31.out test32.out
+ test28.out test29.out test30.out test32.out
test34.out test36.out test37.out
test38.out test39.out test40.out test42.out
test44.out test45.out test46.out test47.out
diff --git a/src/testdir/runtest.vim b/src/testdir/runtest.vim
index d07710afc..245b51c64 100644
--- a/src/testdir/runtest.vim
+++ b/src/testdir/runtest.vim
@@ -250,6 +250,9 @@ endif
" Execute the tests in alphabetical order.
for s:test in sort(s:tests)
+ " Silence, please!
+ set belloff=all
+
call RunTheTest(s:test)
if len(v:errors) > 0 && index(s:flaky, s:test) >= 0
diff --git a/src/testdir/test31.in b/src/testdir/test31.in
deleted file mode 100644
index ff5a4992b..000000000
--- a/src/testdir/test31.in
+++ /dev/null
@@ -1,95 +0,0 @@
-Test for commands that close windows and/or buffers:
-:quit
-:close
-:hide
-:only
-:sall
-:all
-:ball
-:buf
-:edit
-
-STARTTEST
-:so small.vim
-GA 1:$w! Xtest1
-$r2:$w! Xtest2
-$r3:$w! Xtest3
-:n! Xtest1 Xtest2
-A 1:set hidden
-:" test for working :n when hidden set; write "testtext 2"
-:n
-:w! test.out
-:" test for failing :rew when hidden not set; write "testtext 2 2"
-:set nohidden
-A 2:rew
-:w >>test.out
-:" test for working :rew when hidden set; write "testtext 1 1"
-:set hidden
-:rew
-:w >>test.out
-:" test for :all keeping a buffer when it's modified; write "testtext 1 1 1"
-:set nohidden
-A 1:sp
-:n Xtest2 Xtest3
-:all
-:1wincmd w
-:w >>test.out
-:" test abandoning changed buffer, should be unloaded even when 'hidden' set
-:" write "testtext 2 2" twice
-:set hidden
-A 1:q!
-:w >>test.out
-:unhide
-:w >>test.out
-:" test ":hide" hides anyway when 'hidden' not set; write "testtext 3"
-:set nohidden
-A 2:hide
-:w >>test.out
-:" test ":edit" failing in modified buffer when 'hidden' not set
-:" write "testtext 3 3"
-A 3:e Xtest1
-:w >>test.out
-:" test ":edit" working in modified buffer when 'hidden' set; write "testtext 1"
-:set hidden
-:e Xtest1
-:w >>test.out
-:" test ":close" not hiding when 'hidden' not set in modified buffer;
-:" write "testtext 3 3 3"
-:sp Xtest3
-:set nohidden
-A 3:close
-:w >>test.out
-:" test ":close!" does hide when 'hidden' not set in modified buffer;
-:" write "testtext 1"
-A 3:close!
-:w >>test.out
-:set nohidden
-:" test ":all!" hides changed buffer; write "testtext 2 2 2"
-:sp Xtest4
-GA 4:all!
-:1wincmd w
-:w >>test.out
-:"
-:" test ":q!" and hidden buffer.
-:bw! Xtest1 Xtest2 Xtest3 Xtest4
-:sp Xtest1
-:wincmd w
-:bw!
-:set modified
-:bot sp Xtest2
-:set modified
-:bot sp Xtest3
-:set modified
-:wincmd t
-:hide
-:q!
-:w >>test.out
-:q!
-:w >>test.out
-:q!
-:call append(line('$'), "Oh, Not finished yet.")
-:w >>test.out
-:qa!
-ENDTEST
-
-testtext
diff --git a/src/testdir/test31.ok b/src/testdir/test31.ok
deleted file mode 100644
index 39531974c..000000000
--- a/src/testdir/test31.ok
+++ /dev/null
@@ -1,14 +0,0 @@
-testtext 2
-testtext 2 2
-testtext 1 1
-testtext 1 1 1
-testtext 2 2
-testtext 2 2
-testtext 3
-testtext 3 3
-testtext 1
-testtext 3 3 3
-testtext 1
-testtext 2 2 2
-testtext 3
-testtext 1
diff --git a/src/testdir/test4.in b/src/testdir/test4.in
deleted file mode 100644
index b3ee49baa..000000000
--- a/src/testdir/test4.in
+++ /dev/null
@@ -1,34 +0,0 @@
-Test for autocommand that changes current buffer on BufEnter event.
-Check if modelines are interpreted for the correct buffer.
-
-STARTTEST
-:so small.vim
-:set nocompatible viminfo+=nviminfo
-:au BufEnter Xxx brew
-/start of
-:.,/end of/w! Xxx " write test file Xxx
-:set ai modeline modelines=3
-:sp Xxx " split to Xxx, autocmd will do :brew
-G?this is a
-othis should be auto-indented
-: " Append text with autoindent to this file
-:au! BufEnter Xxx
-:buf Xxx " go to Xxx, no autocmd anymore
-G?this is a
-othis should be in column 1:wq " append text without autoindent to Xxx
-G:r Xxx " include Xxx in the current file
-:set fo+=r " issue #57 do not move cursor on <c-o> when autoindent is set
-Go# abcdef2hi
-d0o# abcdef2hid0:
-:?startstart?,$w! test.out
-:qa!
-ENDTEST
-
-startstart
-start of test file Xxx
-vim: set noai :
- this is a test
- this is a test
- this is a test
- this is a test
-end of test file Xxx
diff --git a/src/testdir/test4.ok b/src/testdir/test4.ok
deleted file mode 100644
index d032e4c31..000000000
--- a/src/testdir/test4.ok
+++ /dev/null
@@ -1,20 +0,0 @@
-startstart
-start of test file Xxx
-vim: set noai :
- this is a test
- this is a test
- this is a test
- this is a test
- this should be auto-indented
-end of test file Xxx
-start of test file Xxx
-vim: set noai :
- this is a test
- this is a test
- this is a test
- this is a test
-this should be in column 1
-end of test file Xxx
-# abc
-def
-def
diff --git a/src/testdir/test5.in b/src/testdir/test5.in
deleted file mode 100644
index e19e20d59..000000000
--- a/src/testdir/test5.in
+++ /dev/null
@@ -1,29 +0,0 @@
-Test for autocommand that deletes the current buffer on BufLeave event.
-Also test deleting the last buffer, should give a new, empty buffer.
-
-STARTTEST
-:so small.vim
-:au BufLeave Xxx bwipe
-/start of
-:.,/end of/w! Xxx " write test file Xxx
-:sp Xxx " split to Xxx
-:bwipe " delete buffer Xxx, now we're back here
-G?this is a
-othis is some more text
-: " Append some text to this file
-:?start?,$w! test.out " Write current file contents
-:bwipe test.out " delete alternate buffer
-:au bufleave test5.in bwipe
-:bwipe! " delete current buffer, get an empty one
-ithis is another test line:w >>test.out
-: " append an extra line to the output file
-:qa!
-ENDTEST
-
-start of test file Xxx
-vim: set noai :
- this is a test
- this is a test
- this is a test
- this is a test
-end of test file Xxx
diff --git a/src/testdir/test5.ok b/src/testdir/test5.ok
deleted file mode 100644
index 674306079..000000000
--- a/src/testdir/test5.ok
+++ /dev/null
@@ -1,9 +0,0 @@
-start of test file Xxx
-vim: set noai :
- this is a test
- this is a test
- this is a test
- this is a test
-this is some more text
-end of test file Xxx
-this is another test line
diff --git a/src/testdir/test60.in b/src/testdir/test60.in
deleted file mode 100644
index d3b299beb..000000000
--- a/src/testdir/test60.in
+++ /dev/null
@@ -1,601 +0,0 @@
-Tests for the exists() and has() functions. vim: set ft=vim ts=8 sw=2 :
-
-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"
- 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 += [['+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]]
-
- " 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()
-:"
-: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/testdir/test60.ok b/src/testdir/test60.ok
deleted file mode 100644
index 0c382ad28..000000000
--- a/src/testdir/test60.ok
+++ /dev/null
@@ -1,206 +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
-+autoprint: 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
diff --git a/src/testdir/test60.vim b/src/testdir/test60.vim
deleted file mode 100644
index f1157f73f..000000000
--- a/src/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/src/testdir/test7.in b/src/testdir/test7.in
deleted file mode 100644
index b9cc0585f..000000000
--- a/src/testdir/test7.in
+++ /dev/null
@@ -1,26 +0,0 @@
-Test for autocommand that changes the buffer list, when doing ":ball".
-
-STARTTEST
-:so small.vim
-/^start of
-A1:.,/end of/w! Xxx1 " write test file Xxx1
-:sp Xxx1
-:close
-$r2:.,/end of/w! Xxx2 " write test file Xxx2
-:sp Xxx2
-:close
-$r3:.,/end of/w! Xxx3 " write test file Xxx3
-:sp Xxx3
-:close
-:au BufReadPost Xxx2 bwipe
-$r4:ball " open window for all args, close Xxx2
-:.,$w! test.out " Write contents of this file
-:w >>test.out " Append contents of second window (Xxx1)
-:/^start of/,$w >>test.out " Append contents of last window (this file)
-:qa!
-ENDTEST
-
-start of test file Xxx
- this is a test
- this is a test
-end of test file Xxx
diff --git a/src/testdir/test7.ok b/src/testdir/test7.ok
deleted file mode 100644
index a0d1ff94a..000000000
--- a/src/testdir/test7.ok
+++ /dev/null
@@ -1,12 +0,0 @@
-start of test file Xxx4
- this is a test
- this is a test
-end of test file Xxx
-start of test file Xxx1
- this is a test
- this is a test
-end of test file Xxx
-start of test file Xxx4
- this is a test
- this is a test
-end of test file Xxx
diff --git a/src/testdir/test78.in b/src/testdir/test78.in
deleted file mode 100644
index e97f4a469..000000000
--- a/src/testdir/test78.in
+++ /dev/null
@@ -1,46 +0,0 @@
-Inserts 10000 lines with text to fill the swap file with two levels of pointer
-blocks. Then recovers from the swap file and checks all text is restored.
-
-We need about 10000 lines of 100 characters to get two levels of pointer
-blocks.
-
-STARTTEST
-:so small.vim
-:set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo belloff=all
-:e! Xtest
-ggdG
-:let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
-:let i = 1
-:let linecount = 10000
-:while i <= linecount | call append(i - 1, i . text) | let i += 1 | endwhile
-:preserve
-:" get the name of the swap file
-:redir => swapname
-:swapname
-:redir END
-:let swapname = substitute(swapname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
-:" make a copy of the swap file in Xswap
-:set bin
-:exe 'sp ' . swapname
-:w! Xswap
-:echo swapname
-:set nobin
-:new
-:only!
-:bwipe! Xtest
-:call rename('Xswap', swapname)
-:recover Xtest
-:call delete(swapname)
-:new
-:call append(0, 'recovery start')
-:wincmd w
-:let linedollar = line('$')
-:if linedollar < linecount | exe 'wincmd w' | call append(line('$'), "expected " . linecount . " lines but found only " . linedollar) | exe 'wincmd w' | let linecount = linedollar | endif
-:let i = 1
-:while i <= linecount | if getline(i) != i . text | exe 'wincmd w' | call append(line('$'), i . ' differs') | exe 'wincmd w' | endif | let i += 1 | endwhile
-:q!
-:call append(line('$'), 'recovery end')
-:w! test.out
-:qa!
-ENDTEST
-
diff --git a/src/testdir/test78.ok b/src/testdir/test78.ok
deleted file mode 100644
index 6c3ecefe3..000000000
--- a/src/testdir/test78.ok
+++ /dev/null
@@ -1,3 +0,0 @@
-recovery start
-
-recovery end
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index e9f407620..eb13563e0 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -436,6 +436,8 @@ func Test_OptionSet()
return
endif
+ badd test_autocmd.vim
+
call test_override('starting', 1)
set nocp
au OptionSet * :call s:AutoCommandOptionSet(expand("<amatch>"))
@@ -529,9 +531,10 @@ func Test_OptionSet()
let g:options=[['backup', 0, 1, 'local']]
" try twice, first time, shouldn't trigger because option name is invalid,
" second time, it should trigger
- call assert_fails("call setbufvar(1, '&l:bk', 1)", "E355")
+ let bnum = bufnr('%')
+ call assert_fails("call setbufvar(bnum, '&l:bk', 1)", "E355")
" should trigger, use correct option name
- call setbufvar(1, '&backup', 1)
+ call setbufvar(bnum, '&backup', 1)
call assert_equal([], g:options)
call assert_equal(g:opt[0], g:opt[1])
@@ -645,3 +648,129 @@ func Test_BufleaveWithDelete()
new
bwipe! Xfile1
endfunc
+
+" Test for autocommand that changes the buffer list, when doing ":ball".
+func Test_Acmd_BufAll()
+ enew!
+ %bwipe!
+ call writefile(['Test file Xxx1'], 'Xxx1')
+ call writefile(['Test file Xxx2'], 'Xxx2')
+ call writefile(['Test file Xxx3'], 'Xxx3')
+
+ " Add three files to the buffer list
+ split Xxx1
+ close
+ split Xxx2
+ close
+ split Xxx3
+ close
+
+ " Wipe the buffer when the buffer is opened
+ au BufReadPost Xxx2 bwipe
+
+ call append(0, 'Test file Xxx4')
+ ball
+
+ call assert_equal(2, winnr('$'))
+ call assert_equal('Xxx1', bufname(winbufnr(winnr('$'))))
+ wincmd t
+
+ au! BufReadPost
+ %bwipe!
+ call delete('Xxx1')
+ call delete('Xxx2')
+ call delete('Xxx3')
+ enew! | only
+endfunc
+
+" Test for autocommand that changes current buffer on BufEnter event.
+" Check if modelines are interpreted for the correct buffer.
+func Test_Acmd_BufEnter()
+ %bwipe!
+ call writefile(['start of test file Xxx1',
+ \ "\<Tab>this is a test",
+ \ 'end of test file Xxx1'], 'Xxx1')
+ call writefile(['start of test file Xxx2',
+ \ 'vim: set noai :',
+ \ "\<Tab>this is a test",
+ \ 'end of test file Xxx2'], 'Xxx2')
+
+ au BufEnter Xxx2 brew
+ set ai modeline modelines=3
+ edit Xxx1
+ " edit Xxx2, autocmd will do :brew
+ edit Xxx2
+ exe "normal G?this is a\<CR>"
+ " Append text with autoindent to this file
+ normal othis should be auto-indented
+ call assert_equal("\<Tab>this should be auto-indented", getline('.'))
+ call assert_equal(3, line('.'))
+ " Remove autocmd and edit Xxx2 again
+ au! BufEnter Xxx2
+ buf! Xxx2
+ exe "normal G?this is a\<CR>"
+ " append text without autoindent to Xxx
+ normal othis should be in column 1
+ call assert_equal("this should be in column 1", getline('.'))
+ call assert_equal(4, line('.'))
+
+ %bwipe!
+ call delete('Xxx1')
+ call delete('Xxx2')
+ set ai&vim modeline&vim modelines&vim
+endfunc
+
+" Test for issue #57
+" do not move cursor on <c-o> when autoindent is set
+func Test_ai_CTRL_O()
+ enew!
+ set ai
+ let save_fo = &fo
+ set fo+=r
+ exe "normal o# abcdef\<Esc>2hi\<CR>\<C-O>d0\<Esc>"
+ exe "normal o# abcdef\<Esc>2hi\<C-O>d0\<Esc>"
+ call assert_equal(['# abc', 'def', 'def'], getline(2, 4))
+
+ set ai&vim
+ let &fo = save_fo
+ enew!
+endfunc
+
+" Test for autocommand that deletes the current buffer on BufLeave event.
+" Also test deleting the last buffer, should give a new, empty buffer.
+func Test_BufLeave_Wipe()
+ %bwipe!
+ let content = ['start of test file Xxx',
+ \ 'this is a test',
+ \ 'end of test file Xxx']
+ call writefile(content, 'Xxx1')
+ call writefile(content, 'Xxx2')
+
+ au BufLeave Xxx2 bwipe
+ edit Xxx1
+ split Xxx2
+ " delete buffer Xxx2, we should be back to Xxx1
+ bwipe
+ call assert_equal('Xxx1', bufname('%'))
+ call assert_equal(1, winnr('$'))
+
+ " Create an alternate buffer
+ %write! test.out
+ call assert_equal('test.out', bufname('#'))
+ " delete alternate buffer
+ bwipe test.out
+ call assert_equal('Xxx1', bufname('%'))
+ call assert_equal('', bufname('#'))
+
+ au BufLeave Xxx1 bwipe
+ " delete current buffer, get an empty one
+ bwipe!
+ call assert_equal(1, line('$'))
+ call assert_equal('', bufname('%'))
+ call assert_equal(1, len(getbufinfo()))
+
+ call delete('Xxx1')
+ call delete('Xxx2')
+ %bwipe
+ au! BufLeave
+endfunc
diff --git a/src/testdir/test_exists.vim b/src/testdir/test_exists.vim
new file mode 100644
index 000000000..fd34be83b
--- /dev/null
+++ b/src/testdir/test_exists.vim
@@ -0,0 +1,321 @@
+" Tests for the exists() function
+func Test_exists()
+ augroup myagroup
+ autocmd! BufEnter *.my echo "myfile edited"
+ autocmd! FuncUndefined UndefFun exec "fu UndefFun()\nendfu"
+ augroup END
+ set rtp+=./sautest
+
+ " valid autocmd group
+ call assert_equal(1, exists('#myagroup'))
+ " valid autocmd group with garbage
+ call assert_equal(0, exists('#myagroup+b'))
+ " Valid autocmd group and event
+ call assert_equal(1, exists('#myagroup#BufEnter'))
+ " Valid autocmd group, event and pattern
+ call assert_equal(1, exists('#myagroup#BufEnter#*.my'))
+ " Valid autocmd event
+ call assert_equal(1, exists('#BufEnter'))
+ " Valid autocmd event and pattern
+ call assert_equal(1, exists('#BufEnter#*.my'))
+ " Non-existing autocmd group or event
+ call assert_equal(0, exists('#xyzagroup'))
+ " Non-existing autocmd group and valid autocmd event
+ call assert_equal(0, exists('#xyzagroup#BufEnter'))
+ " Valid autocmd group and event with no matching pattern
+ call assert_equal(0, exists('#myagroup#CmdwinEnter'))
+ " Valid autocmd group and non-existing autocmd event
+ call assert_equal(0, exists('#myagroup#xyzacmd'))
+ " Valid autocmd group and event and non-matching pattern
+ call assert_equal(0, exists('#myagroup#BufEnter#xyzpat'))
+ " Valid autocmd event and non-matching pattern
+ call assert_equal(0, exists('#BufEnter#xyzpat'))
+ " Empty autocmd group, event and pattern
+ call assert_equal(0, exists('###'))
+ " Empty autocmd group and event or empty event and pattern
+ call assert_equal(0, exists('##'))
+ " Valid autocmd event
+ call assert_equal(1, exists('##FileReadCmd'))
+ " Non-existing autocmd event
+ call assert_equal(0, exists('##MySpecialCmd'))
+
+ " Existing and working option (long form)
+ call assert_equal(1, exists('&textwidth'))
+ " Existing and working option (short form)
+ call assert_equal(1, exists('&tw'))
+ " Existing and working option with garbage
+ call assert_equal(0, exists('&tw-'))
+ " Global option
+ call assert_equal(1, exists('&g:errorformat'))
+ " Local option
+ call assert_equal(1, exists('&l:errorformat'))
+ " Negative form of existing and working option (long form)
+ call assert_equal(0, exists('&nojoinspaces'))
+ " Negative form of existing and working option (short form)
+ call assert_equal(0, exists('&nojs'))
+ " Non-existing option
+ call assert_equal(0, exists('&myxyzoption'))
+
+ " Existing and working option (long form)
+ call assert_equal(1, exists('+incsearch'))
+ " Existing and working option with garbage
+ call assert_equal(0, exists('+incsearch!1'))
+ " Existing and working option (short form)
+ call assert_equal(1, exists('+is'))
+ " Existing option that is hidden.
+ call assert_equal(0, exists('+autoprint'))
+
+ " Existing environment variable
+ let $EDITOR_NAME = 'Vim Editor'
+ call assert_equal(1, exists('$EDITOR_NAME'))
+ " Non-existing environment variable
+ call assert_equal(0, exists('$NON_ENV_VAR'))
+
+ " Valid internal function
+ call assert_equal(1, exists('*bufnr'))
+ " Valid internal function with ()
+ call assert_equal(1, exists('*bufnr()'))
+ " Non-existing internal function
+ call assert_equal(0, exists('*myxyzfunc'))
+ " Valid internal function with garbage
+ call assert_equal(0, exists('*bufnr&6'))
+ " Valid user defined function
+ call assert_equal(1, exists('*Test_exists'))
+ " Non-existing user defined function
+ call assert_equal(0, exists('*MyxyzFunc'))
+ " Function that may be created by FuncUndefined event
+ call assert_equal(0, exists('*UndefFun'))
+ " Function that may be created by script autoloading
+ call assert_equal(0, exists('*footest#F'))
+
+ " Valid internal command (full match)
+ call assert_equal(2, exists(':edit'))
+ " Valid internal command (full match) with garbage
+ call assert_equal(0, exists(':edit/a'))
+ " Valid internal command (partial match)
+ call assert_equal(1, exists(':q'))
+ " Non-existing internal command
+ call assert_equal(0, exists(':invalidcmd'))
+
+ " User defined command (full match)
+ command! MyCmd :echo 'My command'
+ call assert_equal(2, exists(':MyCmd'))
+ " User defined command (partial match)
+ command! MyOtherCmd :echo 'Another command'
+ call assert_equal(3, exists(':My'))
+
+ " Command modifier
+ call assert_equal(2, exists(':rightbelow'))
+
+ " Non-existing user defined command (full match)
+ delcommand MyCmd
+ call assert_equal(0, exists(':MyCmd'))
+
+ " Non-existing user defined command (partial match)
+ delcommand MyOtherCmd
+ call assert_equal(0, exists(':My'))
+
+ " Valid local variable
+ let local_var = 1
+ call assert_equal(1, exists('local_var'))
+ " Valid local variable with garbage
+ call assert_equal(0, exists('local_var%n'))
+ " Non-existing local variable
+ unlet local_var
+ call assert_equal(0, exists('local_var'))
+
+ " Non-existing autoload variable that may be autoloaded
+ call assert_equal(0, exists('footest#x'))
+
+ " Valid local list
+ let local_list = ["blue", "orange"]
+ call assert_equal(1, exists('local_list'))
+ " Valid local list item
+ call assert_equal(1, exists('local_list[1]'))
+ " Valid local list item with garbage
+ call assert_equal(0, exists('local_list[1]+5'))
+ " Invalid local list item
+ call assert_equal(0, exists('local_list[2]'))
+ " Non-existing local list
+ unlet local_list
+ call assert_equal(0, exists('local_list'))
+ " Valid local dictionary
+ let local_dict = {"xcord":100, "ycord":2}
+ call assert_equal(1, exists('local_dict'))
+ " Non-existing local dictionary
+ unlet local_dict
+ call assert_equal(0, exists('local_dict'))
+ " Existing local curly-brace variable
+ let str = "local"
+ let curly_{str}_var = 1
+ call assert_equal(1, exists('curly_{str}_var'))
+ " Non-existing local curly-brace variable
+ unlet curly_{str}_var
+ call assert_equal(0, exists('curly_{str}_var'))
+
+ " Existing global variable
+ let g:global_var = 1
+ call assert_equal(1, exists('g:global_var'))
+ " Existing global variable with garbage
+ call assert_equal(0, exists('g:global_var-n'))
+ " Non-existing global variable
+ unlet g:global_var
+ call assert_equal(0, exists('g:global_var'))
+ " Existing global list
+ let g:global_list = ["blue", "orange"]
+ call assert_equal(1, exists('g:global_list'))
+ " Non-existing global list
+ unlet g:global_list
+ call assert_equal(0, exists('g:global_list'))
+ " Existing global dictionary
+ let g:global_dict = {"xcord":100, "ycord":2}
+ call assert_equal(1, exists('g:global_dict'))
+ " Non-existing global dictionary
+ unlet g:global_dict
+ call assert_equal(0, exists('g:global_dict'))
+ " Existing global curly-brace variable
+ let str = "global"
+ let g:curly_{str}_var = 1
+ call assert_equal(1, exists('g:curly_{str}_var'))
+ " Non-existing global curly-brace variable
+ unlet g:curly_{str}_var
+ call assert_equal(0, exists('g:curly_{str}_var'))
+
+ " Existing window variable
+ let w:window_var = 1
+ call assert_equal(1, exists('w:window_var'))
+ " Non-existing window variable
+ unlet w:window_var
+ call assert_equal(0, exists('w:window_var'))
+ " Existing window list
+ let w:window_list = ["blue", "orange"]
+ call assert_equal(1, exists('w:window_list'))
+ " Non-existing window list
+ unlet w:window_list
+ call assert_equal(0, exists('w:window_list'))
+ " Existing window dictionary
+ let w:window_dict = {"xcord":100, "ycord":2}
+ call assert_equal(1, exists('w:window_dict'))
+ " Non-existing window dictionary
+ unlet w:window_dict
+ call assert_equal(0, exists('w:window_dict'))
+ " Existing window curly-brace variable
+ let str = "window"
+ let w:curly_{str}_var = 1
+ call assert_equal(1, exists('w:curly_{str}_var'))
+ " Non-existing window curly-brace variable
+ unlet w:curly_{str}_var
+ call assert_equal(0, exists('w:curly_{str}_var'))
+
+ " Existing tab variable
+ let t:tab_var = 1
+ call assert_equal(1, exists('t:tab_var'))
+ " Non-existing tab variable
+ unlet t:tab_var
+ call assert_equal(0, exists('t:tab_var'))
+ " Existing tab list
+ let t:tab_list = ["blue", "orange"]
+ call assert_equal(1, exists('t:tab_list'))
+ " Non-existing tab list
+ unlet t:tab_list
+ call assert_equal(0, exists('t:tab_list'))
+ " Existing tab dictionary
+ let t:tab_dict = {"xcord":100, "ycord":2}
+ call assert_equal(1, exists('t:tab_dict'))
+ " Non-existing tab dictionary
+ unlet t:tab_dict
+ call assert_equal(0, exists('t:tab_dict'))
+ " Existing tab curly-brace variable
+ let str = "tab"
+ let t:curly_{str}_var = 1
+ call assert_equal(1, exists('t:curly_{str}_var'))
+ " Non-existing tab curly-brace variable
+ unlet t:curly_{str}_var
+ call assert_equal(0, exists('t:curly_{str}_var'))
+
+ " Existing buffer variable
+ let b:buffer_var = 1
+ call assert_equal(1, exists('b:buffer_var'))
+ " Non-existing buffer variable
+ unlet b:buffer_var
+ call assert_equal(0, exists('b:buffer_var'))
+ " Existing buffer list
+ let b:buffer_list = ["blue", "orange"]
+ call assert_equal(1, exists('b:buffer_list'))
+ " Non-existing buffer list
+ unlet b:buffer_list
+ call assert_equal(0, exists('b:buffer_list'))
+ " Existing buffer dictionary
+ let b:buffer_dict = {"xcord":100, "ycord":2}
+ call assert_equal(1, exists('b:buffer_dict'))
+ " Non-existing buffer dictionary
+ unlet b:buffer_dict
+ call assert_equal(0, exists('b:buffer_dict'))
+ " Existing buffer curly-brace variable
+ let str = "buffer"
+ let b:curly_{str}_var = 1
+ call assert_equal(1, exists('b:curly_{str}_var'))
+ " Non-existing buffer curly-brace variable
+ unlet b:curly_{str}_var
+ call assert_equal(0, exists('b:curly_{str}_var'))
+
+ " Existing Vim internal variable
+ call assert_equal(1, exists('v:version'))
+ " Non-existing Vim internal variable
+ call assert_equal(0, exists('v:non_exists_var'))
+
+ " Existing script-local variable
+ let s:script_var = 1
+ call assert_equal(1, exists('s:script_var'))
+ " Non-existing script-local variable
+ unlet s:script_var
+ call assert_equal(0, exists('s:script_var'))
+ " Existing script-local list
+ let s:script_list = ["blue", "orange"]
+ call assert_equal(1, exists('s:script_list'))
+ " Non-existing script-local list
+ unlet s:script_list
+ call assert_equal(0, exists('s:script_list'))
+ " Existing script-local dictionary
+ let s:script_dict = {"xcord":100, "ycord":2}
+ call assert_equal(1, exists('s:script_dict'))
+ " Non-existing script-local dictionary
+ unlet s:script_dict
+ call assert_equal(0, exists('s:script_dict'))
+ " Existing script curly-brace variable
+ let str = "script"
+ let s:curly_{str}_var = 1
+ call assert_equal(1, exists('s:curly_{str}_var'))
+ " Non-existing script-local curly-brace variable
+ unlet s:curly_{str}_var
+ call assert_equal(0, exists('s:curly_{str}_var'))
+
+ " Existing script-local function
+ function! s:my_script_func()
+ endfunction
+
+ echo '*s:my_script_func: 1'
+ call assert_equal(1, exists('*s:my_script_func'))
+
+ " Non-existing script-local function
+ delfunction s:my_script_func
+
+ call assert_equal(0, exists('*s:my_script_func'))
+ unlet str
+
+ call assert_equal(1, g:footest#x)
+ call assert_equal(0, footest#F())
+ call assert_equal(0, UndefFun())
+endfunc
+
+" exists() test for Function arguments
+func FuncArg_Tests(func_arg, ...)
+ call assert_equal(1, exists('a:func_arg'))
+ call assert_equal(0, exists('a:non_exists_arg'))
+ call assert_equal(1, exists('a:1'))
+ call assert_equal(0, exists('a:2'))
+endfunc
+
+func Test_exists_funcarg()
+ call FuncArg_Tests("arg1", "arg2")
+endfunc
diff --git a/src/testdir/test_recover.vim b/src/testdir/test_recover.vim
index 2e34985fe..6f7ff2ba6 100644
--- a/src/testdir/test_recover.vim
+++ b/src/testdir/test_recover.vim
@@ -15,4 +15,48 @@ func Test_recover_root_dir()
set dir&
endfunc
-" TODO: move recover tests from test78.in to here.
+" Inserts 10000 lines with text to fill the swap file with two levels of pointer
+" blocks. Then recovers from the swap file and checks all text is restored.
+"
+" We need about 10000 lines of 100 characters to get two levels of pointer
+" blocks.
+func Test_swap_file()
+ set fileformat=unix undolevels=-1 belloff=all
+ edit! Xtest
+ let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
+ let i = 1
+ let linecount = 10000
+ while i <= linecount
+ call append(i - 1, i . text)
+ let i += 1
+ endwhile
+ $delete
+ preserve
+ " get the name of the swap file
+ let swname = split(execute("swapname"))[0]
+ let swname = substitute(swname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
+ " make a copy of the swap file in Xswap
+ set binary
+ exe 'sp ' . swname
+ w! Xswap
+ set nobinary
+ new
+ only!
+ bwipe! Xtest
+ call rename('Xswap', swname)
+ recover Xtest
+ call delete(swname)
+ let linedollar = line('$')
+ call assert_equal(linecount, linedollar)
+ if linedollar < linecount
+ let linecount = linedollar
+ endif
+ let i = 1
+ while i <= linecount
+ call assert_equal(i . text, getline(i))
+ let i += 1
+ endwhile
+
+ set undolevels&
+ enew! | only
+endfunc
diff --git a/src/testdir/test_winbuf_close.vim b/src/testdir/test_winbuf_close.vim
new file mode 100644
index 000000000..ed64dd79b
--- /dev/null
+++ b/src/testdir/test_winbuf_close.vim
@@ -0,0 +1,124 @@
+" Test for commands that close windows and/or buffers:
+" :quit
+" :close
+" :hide
+" :only
+" :sall
+" :all
+" :ball
+" :buf
+" :edit
+"
+func Test_winbuf_close()
+ enew | only
+
+ call writefile(['testtext 1'], 'Xtest1')
+ call writefile(['testtext 2'], 'Xtest2')
+ call writefile(['testtext 3'], 'Xtest3')
+
+ next! Xtest1 Xtest2
+ call setline(1, 'testtext 1 1')
+
+ " test for working :n when hidden set
+ set hidden
+ next
+ call assert_equal('Xtest2', bufname('%'))
+
+ " test for failing :rew when hidden not set
+ set nohidden
+ call setline(1, 'testtext 2 2')
+ call assert_fails('rewind', 'E37')
+ call assert_equal('Xtest2', bufname('%'))
+ call assert_equal('testtext 2 2', getline(1))
+
+ " test for working :rew when hidden set
+ set hidden
+ rewind
+ call assert_equal('Xtest1', bufname('%'))
+ call assert_equal('testtext 1 1', getline(1))
+
+ " test for :all keeping a buffer when it's modified
+ set nohidden
+ call setline(1, 'testtext 1 1 1')
+ split
+ next Xtest2 Xtest3
+ all
+ 1wincmd w
+ call assert_equal('Xtest1', bufname('%'))
+ call assert_equal('testtext 1 1 1', getline(1))
+
+ " test abandoning changed buffer, should be unloaded even when 'hidden' set
+ set hidden
+ call setline(1, 'testtext 1 1 1 1')
+ quit!
+ call assert_equal('Xtest2', bufname('%'))
+ call assert_equal('testtext 2 2', getline(1))
+ unhide
+ call assert_equal('Xtest2', bufname('%'))
+ call assert_equal('testtext 2 2', getline(1))
+
+ " test ":hide" hides anyway when 'hidden' not set
+ set nohidden
+ call setline(1, 'testtext 2 2 2')
+ hide
+ call assert_equal('Xtest3', bufname('%'))
+ call assert_equal('testtext 3', getline(1))
+
+ " test ":edit" failing in modified buffer when 'hidden' not set
+ call setline(1, 'testtext 3 3')
+ call assert_fails('edit Xtest1', 'E37')
+ call assert_equal('Xtest3', bufname('%'))
+ call assert_equal('testtext 3 3', getline(1))
+
+ " test ":edit" working in modified buffer when 'hidden' set
+ set hidden
+ edit Xtest1
+ call assert_equal('Xtest1', bufname('%'))
+ call assert_equal('testtext 1', getline(1))
+
+ " test ":close" not hiding when 'hidden' not set in modified buffer
+ split Xtest3
+ set nohidden
+ call setline(1, 'testtext 3 3 3')
+ call assert_fails('close', 'E37')
+ call assert_equal('Xtest3', bufname('%'))
+ call assert_equal('testtext 3 3 3', getline(1))
+
+ " test ":close!" does hide when 'hidden' not set in modified buffer;
+ call setline(1, 'testtext 3 3 3 3')
+ close!
+ call assert_equal('Xtest1', bufname('%'))
+ call assert_equal('testtext 1', getline(1))
+
+ set nohidden
+
+ " test ":all!" hides changed buffer
+ split Xtest4
+ call setline(1, 'testtext 4')
+ all!
+ 1wincmd w
+ call assert_equal('Xtest2', bufname('%'))
+ call assert_equal('testtext 2 2 2', getline(1))
+
+ " test ":q!" and hidden buffer.
+ bwipe! Xtest1 Xtest2 Xtest3 Xtest4
+ split Xtest1
+ wincmd w
+ bwipe!
+ set modified
+ bot split Xtest2
+ set modified
+ bot split Xtest3
+ set modified
+ wincmd t
+ hide
+ call assert_equal('Xtest2', bufname('%'))
+ quit!
+ call assert_equal('Xtest3', bufname('%'))
+ call assert_fails('silent! quit!', 'E162')
+ call assert_equal('Xtest1', bufname('%'))
+
+ call delete('Xtest1')
+ call delete('Xtest2')
+ call delete('Xtest3')
+endfunc
diff --git a/src/version.c b/src/version.c
index 6302ad27e..398a668ad 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1186,
+/**/
1185,
/**/
1184,