summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-04-04 14:00:39 +0200
committerBram Moolenaar <Bram@vim.org>2020-04-04 14:00:39 +0200
commitcde0ff39da2459b16007fef701ebaa449fb6fe9d (patch)
tree9ba0f500505470043d6e78a30600419375d4c76f
parentd77a8525d5438cae49f670eb473ef60d87ca5f54 (diff)
downloadvim-git-8.2.0509.tar.gz
patch 8.2.0509: various code is not properly tested.v8.2.0509
Problem: various code is not properly tested. Solution: Add more tests. (Yegappan Lakshmanan, closes #5871)
-rw-r--r--src/main.c2
-rw-r--r--src/testdir/check.vim10
-rw-r--r--src/testdir/shared.vim2
-rw-r--r--src/testdir/term_util.vim4
-rw-r--r--src/testdir/test_clientserver.vim73
-rw-r--r--src/testdir/test_ex_mode.vim4
-rw-r--r--src/testdir/test_expand.vim9
-rw-r--r--src/testdir/test_functions.vim16
-rw-r--r--src/testdir/test_options.vim9
-rw-r--r--src/testdir/test_startup.vim273
-rw-r--r--src/testdir/test_textformat.vim54
-rw-r--r--src/testdir/test_trycatch.vim4
-rw-r--r--src/testdir/test_viminfo.vim5
-rw-r--r--src/version.c2
14 files changed, 452 insertions, 15 deletions
diff --git a/src/main.c b/src/main.c
index 2d61c0682..79973cbaa 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1966,7 +1966,7 @@ parse_command_name(mparm_T *parmp)
#endif
}
- // Checking for "ex" here may catch some weir names, such as "vimex" or
+ // Checking for "ex" here may catch some weird names, such as "vimex" or
// "viewex", we assume the user knows that.
if (STRNICMP(initstr, "ex", 2) == 0)
{
diff --git a/src/testdir/check.vim b/src/testdir/check.vim
index 22c33c0ac..34bf5b319 100644
--- a/src/testdir/check.vim
+++ b/src/testdir/check.vim
@@ -133,3 +133,13 @@ func CheckNotRoot()
throw 'Skipped: cannot run test as root'
endif
endfunc
+
+" Command to check that the current language is English
+command CheckEnglish call CheckEnglish()
+func CheckEnglish()
+ if v:lang != "C" && v:lang !~ '^[Ee]n'
+ throw 'Skipped: only works in English language environment'
+ endif
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/shared.vim b/src/testdir/shared.vim
index 58b727187..239051e15 100644
--- a/src/testdir/shared.vim
+++ b/src/testdir/shared.vim
@@ -337,3 +337,5 @@ func IsRoot()
endif
return v:false
endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/term_util.vim b/src/testdir/term_util.vim
index dd1f71dc0..32e288914 100644
--- a/src/testdir/term_util.vim
+++ b/src/testdir/term_util.vim
@@ -82,6 +82,8 @@ func RunVimInTerminal(arguments, options)
let cols = term_getsize(buf)[1]
endif
+ call term_wait(buf)
+
" Wait for "All" or "Top" of the ruler to be shown in the last line or in
" the status line of the last window. This can be quite slow (e.g. when
" using valgrind).
@@ -113,3 +115,5 @@ func StopVimInTerminal(buf)
call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))})
only!
endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_clientserver.vim b/src/testdir/test_clientserver.vim
index 00b06b29d..8a333aa90 100644
--- a/src/testdir/test_clientserver.vim
+++ b/src/testdir/test_clientserver.vim
@@ -6,11 +6,7 @@ CheckFeature clientserver
source shared.vim
-func Test_client_server()
- let cmd = GetVimCommand()
- if cmd == ''
- return
- endif
+func Check_X11_Connection()
if has('x11')
if empty($DISPLAY)
throw 'Skipped: $DISPLAY is not set'
@@ -19,11 +15,19 @@ func Test_client_server()
call remote_send('xxx', '')
catch
if v:exception =~ 'E240:'
- throw 'Skipped: no connection to the X server'
+ throw 'Skipped: no connection to the X server'
endif
" ignore other errors
endtry
endif
+endfunc
+
+func Test_client_server()
+ let cmd = GetVimCommand()
+ if cmd == ''
+ return
+ endif
+ call Check_X11_Connection()
let name = 'XVIMTEST'
let cmd .= ' --servername ' . name
@@ -72,6 +76,10 @@ func Test_client_server()
endif
let g:testvar = 'myself'
call assert_equal('myself', remote_expr(v:servername, 'testvar'))
+ call remote_send(v:servername, ":let g:testvar2 = 75\<CR>")
+ call feedkeys('', 'x')
+ call assert_equal(75, g:testvar2)
+ call assert_fails('let v = remote_expr(v:servername, "/2")', 'E449:')
call remote_send(name, ":call server2client(expand('<client>'), 'got it')\<CR>", 'g:myserverid')
call assert_equal('got it', g:myserverid->remote_read(2))
@@ -92,6 +100,55 @@ func Test_client_server()
call assert_equal('another', g:peek_result)
call assert_equal('another', remote_read(g:myserverid, 2))
+ if !has('gui_running')
+ " In GUI vim, the following tests display a dialog box
+
+ let cmd = GetVimProg() .. ' --servername ' .. name
+
+ " Run a separate instance to send a command to the server
+ call remote_expr(name, 'execute("only")')
+ call system(cmd .. ' --remote-send ":new Xfile<CR>"')
+ call assert_equal('2', remote_expr(name, 'winnr("$")'))
+ call assert_equal('Xfile', remote_expr(name, 'winbufnr(1)->bufname()'))
+ call remote_expr(name, 'execute("only")')
+
+ " Invoke a remote-expr. On MS-Windows, the returned value has a carriage
+ " return.
+ let l = system(cmd .. ' --remote-expr "2 + 2"')
+ call assert_equal(['4'], split(l, "\n"))
+
+ " Edit multiple files using --remote
+ call system(cmd .. ' --remote Xfile1 Xfile2 Xfile3')
+ call assert_equal("Xfile1\nXfile2\nXfile3\n", remote_expr(name, 'argv()'))
+ eval name->remote_send(":%bw!\<CR>")
+
+ " Edit files in separate tab pages
+ call system(cmd .. ' --remote-tab Xfile1 Xfile2 Xfile3')
+ call assert_equal('3', remote_expr(name, 'tabpagenr("$")'))
+ call assert_equal('Xfile2', remote_expr(name, 'bufname(tabpagebuflist(2)[0])'))
+ eval name->remote_send(":%bw!\<CR>")
+
+ " Edit a file using --remote-wait
+ eval name->remote_send(":source $VIMRUNTIME/plugin/rrhelper.vim\<CR>")
+ call system(cmd .. ' --remote-wait +enew Xfile1')
+ call assert_equal("Xfile1", remote_expr(name, 'bufname("#")'))
+ eval name->remote_send(":%bw!\<CR>")
+
+ " Edit files using --remote-tab-wait
+ call system(cmd .. ' --remote-tabwait +tabonly\|enew Xfile1 Xfile2')
+ call assert_equal('1', remote_expr(name, 'tabpagenr("$")'))
+ eval name->remote_send(":%bw!\<CR>")
+
+ " Error cases
+ if v:lang == "C" || v:lang =~ '^[Ee]n'
+ let l = split(system(cmd .. ' --remote +pwd'), "\n")
+ call assert_equal("Argument missing after: \"+pwd\"", l[1])
+ endif
+ let l = system(cmd .. ' --remote-expr "abcd"')
+ call assert_match('^E449: ', l)
+ endif
+
+ eval name->remote_send(":%bw!\<CR>")
eval name->remote_send(":qa!\<CR>")
try
call WaitForAssert({-> assert_equal("dead", job_status(job))})
@@ -102,8 +159,8 @@ func Test_client_server()
endif
endtry
- call assert_fails("let x=remote_peek([])", 'E730:')
- call assert_fails("let x=remote_read('vim10')", 'E277:')
+ call assert_fails("let x = remote_peek([])", 'E730:')
+ call assert_fails("let x = remote_read('vim10')", 'E277:')
endfunc
" Uncomment this line to get a debugging log
diff --git a/src/testdir/test_ex_mode.vim b/src/testdir/test_ex_mode.vim
index a72486b37..9f66e3f01 100644
--- a/src/testdir/test_ex_mode.vim
+++ b/src/testdir/test_ex_mode.vim
@@ -146,9 +146,7 @@ endfunc
" In Ex-mode, backslashes at the end of a command should be halved.
func Test_Ex_echo_backslash()
" This test works only when the language is English
- if v:lang != "C" && v:lang !~ '^[Ee]n'
- return
- endif
+ CheckEnglish
let bsl = '\\\\'
let bsl2 = '\\\'
call assert_fails('call feedkeys("Qecho " .. bsl .. "\nvisual\n", "xt")',
diff --git a/src/testdir/test_expand.vim b/src/testdir/test_expand.vim
index d86fea4f4..383921bb8 100644
--- a/src/testdir/test_expand.vim
+++ b/src/testdir/test_expand.vim
@@ -84,6 +84,15 @@ func Test_expandcmd()
let $FOO="blue\tsky"
call setline(1, "$FOO")
call assert_equal("grep pat blue\tsky", expandcmd('grep pat <cfile>'))
+
+ " Test for expression expansion `=
+ let $FOO= "blue"
+ call assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`"))
+
+ " Test for env variable with spaces
+ let $FOO= "foo bar baz"
+ call assert_equal("e foo bar baz", expandcmd("e $FOO"))
+
unlet $FOO
close!
endfunc
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index 9260fb0e5..653654f15 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -659,6 +659,7 @@ func Save_mode()
return ''
endfunc
+" Test for the mode() function
func Test_mode()
new
call append(0, ["Blue Ball Black", "Brown Band Bowl", ""])
@@ -782,6 +783,8 @@ func Test_mode()
call assert_equal('c-c', g:current_modes)
call feedkeys("gQecho \<C-R>=Save_mode()\<CR>\<CR>vi\<CR>", 'xt')
call assert_equal('c-cv', g:current_modes)
+ call feedkeys("Qcall Save_mode()\<CR>vi\<CR>", 'xt')
+ call assert_equal('c-ce', g:current_modes)
" How to test Ex mode?
bwipe!
@@ -1284,6 +1287,19 @@ func Test_inputlist()
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>3\<cr>", 'tx')
call assert_equal(3, c)
+ " Use backspace to delete characters in the prompt
+ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<BS>3\<BS>2\<cr>", 'tx')
+ call assert_equal(2, c)
+
+ " Use mouse to make a selection
+ call test_setmouse(&lines - 3, 2)
+ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>\<LeftMouse>", 'tx')
+ call assert_equal(1, c)
+ " Mouse click outside of the list
+ call test_setmouse(&lines - 6, 2)
+ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>\<LeftMouse>", 'tx')
+ call assert_equal(-2, c)
+
call assert_fails('call inputlist("")', 'E686:')
endfunc
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index f5e0e9b14..f1118948d 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -1,6 +1,7 @@
" Test for options
source check.vim
+source view_util.vim
func Test_whichwrap()
set whichwrap=b,s
@@ -707,4 +708,12 @@ func Test_rightleftcmd()
set rightleft&
endfunc
+" Test for the "debug" option
+func Test_debug_option()
+ set debug=beep
+ exe "normal \<C-c>"
+ call assert_equal('Beep!', Screenline(&lines))
+ set debug&
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_startup.vim b/src/testdir/test_startup.vim
index 1617c5243..f532c43b2 100644
--- a/src/testdir/test_startup.vim
+++ b/src/testdir/test_startup.vim
@@ -2,6 +2,7 @@
source shared.vim
source screendump.vim
+source term_util.vim
source check.vim
" Check that loading startup.vim works.
@@ -10,6 +11,9 @@ func Test_startup_script()
source $VIMRUNTIME/defaults.vim
call assert_equal(0, &compatible)
+ " Restore some options, so that the following tests doesn't break
+ set nomore
+ set noshowmode
endfunc
" Verify the order in which plugins are loaded:
@@ -322,6 +326,10 @@ func Test_q_arg()
\ lines)
endif
+ " Test with a non-existing error file (exits with value 3)
+ let out = system(GetVimCommand() .. ' -q xyz.err')
+ call assert_equal(3, v:shell_error)
+
call delete('Xtestout')
call delete('Xerrors')
endfunc
@@ -687,3 +695,268 @@ func Test_v_argv()
call assert_true(idx > 2)
call assert_equal(['arg1', '--cmd', 'echo v:argv', '--cmd', 'q'']'], list[idx:])
endfunc
+
+" Test for the "-r" recovery mode option
+func Test_r_arg()
+ " Can't catch the output of gvim.
+ CheckNotGui
+ CheckUnix
+ CheckEnglish
+ let cmd = GetVimCommand()
+ " There can be swap files anywhere, only check for the headers.
+ let expected =<< trim END
+ Swap files found:.*
+ In current directory:.*
+ In directory \~/tmp:.*
+ In directory /var/tmp:.*
+ In directory /tmp:.*
+ END
+ call assert_match(join(expected, ""), system(cmd .. " -r")->substitute("[\r\n]\\+", '', ''))
+endfunc
+
+" Test for the '-t' option to jump to a tag
+func Test_t_arg()
+ let before =<< trim [CODE]
+ set tags=Xtags
+ [CODE]
+ let after =<< trim [CODE]
+ let s = bufname('') .. ':L' .. line('.') .. 'C' .. col('.')
+ call writefile([s], "Xtestout")
+ qall
+ [CODE]
+
+ call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//",
+ \ "first\tXfile1\t/^ \\zsfirst$/",
+ \ "second\tXfile1\t/^ \\zssecond$/",
+ \ "third\tXfile1\t/^ \\zsthird$/"],
+ \ 'Xtags')
+ call writefile([' first', ' second', ' third'], 'Xfile1')
+
+ if RunVim(before, after, '-t second')
+ call assert_equal(['Xfile1:L2C5'], readfile('Xtestout'))
+ call delete('Xtestout')
+ endif
+
+ call delete('Xtags')
+ call delete('Xfile1')
+endfunc
+
+" Test for entering the insert mode on startup
+func Test_start_insertmode()
+ let before =<< trim [CODE]
+ set insertmode
+ [CODE]
+ let after =<< trim [CODE]
+ call writefile(['insertmode=' .. &insertmode], 'Xtestout')
+ qall
+ [CODE]
+ if RunVim(before, after, '')
+ call assert_equal(['insertmode=1'], readfile('Xtestout'))
+ call delete('Xtestout')
+ endif
+endfunc
+
+" Test for enabling the binary mode on startup
+func Test_b_arg()
+ let after =<< trim [CODE]
+ call writefile(['binary=' .. &binary], 'Xtestout')
+ qall
+ [CODE]
+ if RunVim([], after, '-b')
+ call assert_equal(['binary=1'], readfile('Xtestout'))
+ call delete('Xtestout')
+ endif
+endfunc
+
+" Test for enabling the lisp mode on startup
+func Test_l_arg()
+ let after =<< trim [CODE]
+ let s = 'lisp=' .. &lisp .. ', showmatch=' .. &showmatch
+ call writefile([s], 'Xtestout')
+ qall
+ [CODE]
+ if RunVim([], after, '-l')
+ call assert_equal(['lisp=1, showmatch=1'], readfile('Xtestout'))
+ call delete('Xtestout')
+ endif
+endfunc
+
+" Test for specifying a non-existing vimrc file using "-u"
+func Test_missing_vimrc()
+ if !CanRunVimInTerminal()
+ throw 'Skipped: cannot run vim in terminal'
+ endif
+ let after =<< trim [CODE]
+ call assert_match('^E282:', v:errmsg)
+ call writefile(v:errors, 'Xtestout')
+ [CODE]
+ call writefile(after, 'Xafter')
+
+ let cmd = GetVimCommandCleanTerm() . ' -u Xvimrc_missing -S Xafter'
+ let buf = term_start(cmd, {'term_rows' : 10})
+ call WaitForAssert({-> assert_equal("running", term_getstatus(buf))})
+ call term_wait(buf)
+ call term_sendkeys(buf, "\n:")
+ call term_wait(buf)
+ call WaitForAssert({-> assert_match(':', term_getline(buf, 10))})
+ call StopVimInTerminal(buf)
+ call assert_equal([], readfile('Xtestout'))
+ call delete('Xafter')
+ call delete('Xtestout')
+endfunc
+
+" Test for using the $VIMINIT environment variable
+func Test_VIMINIT()
+ let after =<< trim [CODE]
+ call assert_equal(1, exists('viminit_found'))
+ call assert_equal('yes', viminit_found)
+ call writefile(v:errors, 'Xtestout')
+ qall
+ [CODE]
+ call writefile(after, 'Xafter')
+ let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"'
+ call setenv('VIMINIT', 'let viminit_found="yes"')
+ exe "silent !" . cmd
+ call assert_equal([], readfile('Xtestout'))
+ call delete('Xtestout')
+ call delete('Xafter')
+endfunc
+
+" Test for using the $EXINIT environment variable
+func Test_EXINIT()
+ let after =<< trim [CODE]
+ call assert_equal(1, exists('exinit_found'))
+ call assert_equal('yes', exinit_found)
+ call writefile(v:errors, 'Xtestout')
+ qall
+ [CODE]
+ call writefile(after, 'Xafter')
+ let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"'
+ call setenv('EXINIT', 'let exinit_found="yes"')
+ exe "silent !" . cmd
+ call assert_equal([], readfile('Xtestout'))
+ call delete('Xtestout')
+ call delete('Xafter')
+endfunc
+
+" Test for using the 'exrc' option
+func Test_exrc()
+ let after =<< trim [CODE]
+ call assert_equal(1, &exrc)
+ call assert_equal(1, &secure)
+ call assert_equal(37, exrc_found)
+ call writefile(v:errors, 'Xtestout')
+ qall
+ [CODE]
+ call mkdir('Xdir')
+ call writefile(['let exrc_found=37'], 'Xdir/.exrc')
+ call writefile(after, 'Xdir/Xafter')
+ let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "cd Xdir" --cmd "set enc=utf8 exrc secure"'
+ exe "silent !" . cmd
+ call assert_equal([], readfile('Xdir/Xtestout'))
+ call delete('Xdir', 'rf')
+endfunc
+
+" Test for starting Vim with a non-terminal as input/output
+func Test_io_not_a_terminal()
+ " Can't catch the output of gvim.
+ CheckNotGui
+ CheckUnix
+ CheckEnglish
+ let l = systemlist(GetVimProg() .. ' --ttyfail')
+ call assert_equal(['Vim: Warning: Output is not to a terminal',
+ \ 'Vim: Warning: Input is not from a terminal'], l)
+endfunc
+
+" Test for the "-w scriptout" argument
+func Test_w_arg()
+ " Can't catch the output of gvim.
+ CheckNotGui
+ call writefile(["iVim Editor\<Esc>:q!\<CR>"], 'Xscriptin', 'b')
+ if RunVim([], [], '-s Xscriptin -w Xscriptout')
+ call assert_equal(["iVim Editor\e:q!\r"], readfile('Xscriptout'))
+ call delete('Xscriptout')
+ endif
+ call delete('Xscriptin')
+
+ " Test for failing to open the script output file. This test works only when
+ " the language is English.
+ if v:lang == "C" || v:lang =~ '^[Ee]n'
+ call mkdir("Xdir")
+ let m = system(GetVimCommand() .. " -w Xdir")
+ call assert_equal("Cannot open for script output: \"Xdir\"\n", m)
+ call delete("Xdir", 'rf')
+ endif
+endfunc
+
+" Test for the "-s scriptin" argument
+func Test_s_arg()
+ " Can't catch the output of gvim.
+ CheckNotGui
+ CheckEnglish
+ " Test for failing to open the script input file.
+ let m = system(GetVimCommand() .. " -s abcxyz")
+ call assert_equal("Cannot open for reading: \"abcxyz\"\n", m)
+
+ call writefile([], 'Xinput')
+ let m = system(GetVimCommand() .. " -s Xinput -s Xinput")
+ call assert_equal("Attempt to open script file again: \"-s Xinput\"\n", m)
+ call delete('Xinput')
+endfunc
+
+" Test for the "-n" (no swap file) argument
+func Test_n_arg()
+ let after =<< trim [CODE]
+ call assert_equal(0, &updatecount)
+ call writefile(v:errors, 'Xtestout')
+ qall
+ [CODE]
+ if RunVim([], after, '-n')
+ call assert_equal([], readfile('Xtestout'))
+ call delete('Xtestout')
+ endif
+ call delete('Xafter')
+endfunc
+
+" Test for the "-h" (help) argument
+func Test_h_arg()
+ " Can't catch the output of gvim.
+ CheckNotGui
+ let l = systemlist(GetVimProg() .. ' -h')
+ call assert_match('^VIM - Vi IMproved', l[0])
+ let l = systemlist(GetVimProg() .. ' -?')
+ call assert_match('^VIM - Vi IMproved', l[0])
+endfunc
+
+" Test for the "-F" (farsi) argument
+func Test_F_arg()
+ " Can't catch the output of gvim.
+ CheckNotGui
+ let l = systemlist(GetVimProg() .. ' -F')
+ call assert_match('^E27:', l[0])
+endfunc
+
+" Test for the "-E" (improved Ex mode) argument
+func Test_E_arg()
+ let after =<< trim [CODE]
+ call assert_equal('cv', mode(1))
+ call writefile(v:errors, 'Xtestout')
+ qall
+ [CODE]
+ if RunVim([], after, '-E')
+ call assert_equal([], readfile('Xtestout'))
+ call delete('Xtestout')
+ endif
+ call delete('Xafter')
+endfunc
+
+" Test for too many edit argument errors
+func Test_too_many_edit_args()
+ " Can't catch the output of gvim.
+ CheckNotGui
+ CheckEnglish
+ let l = systemlist(GetVimProg() .. ' - -')
+ call assert_match('^Too many edit arguments: "-"', l[1])
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_textformat.vim b/src/testdir/test_textformat.vim
index bb41e45a2..90c95aeb2 100644
--- a/src/testdir/test_textformat.vim
+++ b/src/testdir/test_textformat.vim
@@ -1026,6 +1026,41 @@ func Test_comment_nested()
%bw!
endfunc
+" Test for a space character in 'comments' setting
+func Test_comment_space()
+ new
+ setlocal comments=b:\ > fo+=ro
+ exe "normal i> B\nD\<C-C>ggOA\<C-C>joC"
+ exe "normal Go > F\nH\<C-C>kOE\<C-C>joG"
+ let expected =<< trim END
+ A
+ > B
+ C
+ D
+ > E
+ > F
+ > G
+ > H
+ END
+ call assert_equal(expected, getline(1, '$'))
+ %bw!
+endfunc
+
+" Test for the 'O' flag in 'comments'
+func Test_comment_O()
+ new
+ setlocal comments=Ob:* fo+=ro
+ exe "normal i* B\nD\<C-C>kOA\<C-C>joC"
+ let expected =<< trim END
+ A
+ * B
+ * C
+ * D
+ END
+ call assert_equal(expected, getline(1, '$'))
+ %bw!
+endfunc
+
" Test for 'a' and 'w' flags in 'formatoptions'
func Test_fo_a_w()
new
@@ -1035,4 +1070,23 @@ func Test_fo_a_w()
%bw!
endfunc
+" Test for 'j' flag in 'formatoptions'
+func Test_fo_j()
+ new
+ setlocal fo+=j comments=://
+ call setline(1, ['i++; // comment1', ' // comment2'])
+ normal J
+ call assert_equal('i++; // comment1 comment2', getline(1))
+ setlocal fo-=j
+ call setline(1, ['i++; // comment1', ' // comment2'])
+ normal J
+ call assert_equal('i++; // comment1 // comment2', getline(1))
+ " Test with nested comments
+ setlocal fo+=j comments=n:>,n:)
+ call setline(1, ['i++; > ) > ) comment1', ' > ) comment2'])
+ normal J
+ call assert_equal('i++; > ) > ) comment1 comment2', getline(1))
+ %bw!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_trycatch.vim b/src/testdir/test_trycatch.vim
index b15f8128d..68ab7fc51 100644
--- a/src/testdir/test_trycatch.vim
+++ b/src/testdir/test_trycatch.vim
@@ -2012,9 +2012,7 @@ endfunc
" Test for verbose messages with :try :catch, and :finally {{{1
func Test_try_catch_verbose()
" This test works only when the language is English
- if v:lang != "C" && v:lang !~ '^[Ee]n'
- return
- endif
+ CheckEnglish
set verbose=14
diff --git a/src/testdir/test_viminfo.vim b/src/testdir/test_viminfo.vim
index 78e0f1a81..044da0a1b 100644
--- a/src/testdir/test_viminfo.vim
+++ b/src/testdir/test_viminfo.vim
@@ -760,6 +760,11 @@ func Test_viminfo_perm()
call setfperm('Xviminfo', '--x------')
call assert_fails('rviminfo Xviminfo', 'E195:')
call delete('Xviminfo')
+
+ " Try to write the viminfo to a directory
+ call mkdir('Xdir')
+ call assert_fails('wviminfo Xdir', 'E886:')
+ call delete('Xdir', 'rf')
endfunc
" Test for writing to an existing viminfo file merges the file marks
diff --git a/src/version.c b/src/version.c
index f0823995e..34553c60a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 509,
+/**/
508,
/**/
507,