changeset 20261:aafedd368f40 v8.2.0686

patch 8.2.0686: formatoptions not sufficiently tested Commit: https://github.com/vim/vim/commit/2eaeaf3c317a5145fb0bc926411561d50883019b Author: Bram Moolenaar <Bram@vim.org> Date: Sun May 3 16:04:43 2020 +0200 patch 8.2.0686: formatoptions not sufficiently tested Problem: Formatoptions not sufficiently tested. Solution: Add a few more tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/6031)
author Bram Moolenaar <Bram@vim.org>
date Sun, 03 May 2020 16:15:03 +0200
parents fadcfcc96545
children 24a6768047f1
files src/testdir/test_normal.vim src/testdir/test_textformat.vim src/version.c
diffstat 3 files changed, 209 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -204,6 +204,21 @@ func Test_normal05_formatexpr_setopt()
   set formatexpr=
 endfunc
 
+" When 'formatexpr' returns non-zero, internal formatting is used.
+func Test_normal_formatexpr_returns_nonzero()
+  new
+  call setline(1, ['one', 'two'])
+  func! Format()
+    return 1
+  endfunc
+  setlocal formatexpr=Format()
+  normal VGgq
+  call assert_equal(['one two'], getline(1, '$'))
+  setlocal formatexpr=
+  delfunc Format
+  close!
+endfunc
+
 " basic test for formatprg
 func Test_normal06_formatprg()
   " only test on non windows platform
--- a/src/testdir/test_textformat.vim
+++ b/src/testdir/test_textformat.vim
@@ -1091,6 +1091,17 @@ func Test_fo_a_w()
   setlocal fo+=aw tw=10
   call feedkeys("iabc abc a abc\<Esc>k0weade", 'xt')
   call assert_equal(['abc abcde ', 'a abc'], getline(1, '$'))
+
+  " Test for 'a', 'w' and '1' options.
+  setlocal textwidth=0
+  setlocal fo=1aw
+  %d
+  call setline(1, '. foo')
+  normal 72ig
+  call feedkeys('a uu uu uu', 'xt')
+  call assert_equal('g uu uu ', getline(1)[-8:])
+  call assert_equal(['uu. foo'], getline(2, '$'))
+
   %bw!
 endfunc
 
@@ -1113,4 +1124,185 @@ func Test_fo_j()
   %bw!
 endfunc
 
+" Test for formatting lines using gq in visual mode
+func Test_visual_gq_format()
+  new
+  call setline(1, ['one two three four', 'five six', 'one two'])
+  setl textwidth=10
+  call feedkeys('ggv$jj', 'xt')
+  redraw!
+  normal gq
+  %d
+  call setline(1, ['one two three four', 'five six', 'one two'])
+  normal G$
+  call feedkeys('v0kk', 'xt')
+  redraw!
+  normal gq
+  setl textwidth&
+  close!
+endfunc
+
+" Test for 'n' flag in 'formatoptions' to format numbered lists
+func Test_fo_n()
+  new
+  setlocal autoindent
+  setlocal textwidth=12
+  setlocal fo=n
+  call setline(1, ['  1) one two three four', '  2) two'])
+  normal gggqG
+  call assert_equal(['  1) one two', '     three', '     four', '  2) two'],
+        \ getline(1, '$'))
+  close!
+endfunc
+
+" Test for 'formatlistpat' option
+func Test_formatlistpat()
+  new
+  setlocal autoindent
+  setlocal textwidth=10
+  setlocal fo=n
+  setlocal formatlistpat=^\\s*-\\s*
+  call setline(1, ['  - one two three', '  - two'])
+  normal gggqG
+  call assert_equal(['  - one', '    two', '    three', '  - two'],
+        \ getline(1, '$'))
+  close!
+endfunc
+
+" Test for the 'b' and 'v' flags in 'formatoptions'
+" Text should wrap only if a space character is inserted at or before
+" 'textwidth'
+func Test_fo_b()
+  new
+  setlocal textwidth=20
+
+  setlocal formatoptions=t
+  call setline(1, 'one two three four')
+  call feedkeys('Amore', 'xt')
+  call assert_equal(['one two three', 'fourmore'], getline(1, '$'))
+
+  setlocal formatoptions=bt
+  %d
+  call setline(1, 'one two three four')
+  call feedkeys('Amore five', 'xt')
+  call assert_equal(['one two three fourmore five'], getline(1, '$'))
+
+  setlocal formatoptions=bt
+  %d
+  call setline(1, 'one two three four')
+  call feedkeys('A five', 'xt')
+  call assert_equal(['one two three four', 'five'], getline(1, '$'))
+
+  setlocal formatoptions=vt
+  %d
+  call setline(1, 'one two three four')
+  call feedkeys('Amore five', 'xt')
+  call assert_equal(['one two three fourmore', 'five'], getline(1, '$'))
+
+  close!
+endfunc
+
+" Test for the '1' flag in 'formatoptions'. Don't wrap text after a one letter
+" word.
+func Test_fo_1()
+  new
+  setlocal textwidth=20
+
+  setlocal formatoptions=t
+  call setline(1, 'one two three four')
+  call feedkeys('A a bird', 'xt')
+  call assert_equal(['one two three four a', 'bird'], getline(1, '$'))
+
+  %d
+  setlocal formatoptions=t1
+  call setline(1, 'one two three four')
+  call feedkeys('A a bird', 'xt')
+  call assert_equal(['one two three four', 'a bird'], getline(1, '$'))
+
+  close!
+endfunc
+
+" Test for 'l' flag in 'formatoptions'. When starting insert mode, if a line
+" is longer than 'textwidth', then it is not broken.
+func Test_fo_l()
+  new
+  setlocal textwidth=20
+
+  setlocal formatoptions=t
+  call setline(1, 'one two three four five')
+  call feedkeys('A six', 'xt')
+  call assert_equal(['one two three four', 'five six'], getline(1, '$'))
+
+  %d
+  setlocal formatoptions=tl
+  call setline(1, 'one two three four five')
+  call feedkeys('A six', 'xt')
+  call assert_equal(['one two three four five six'], getline(1, '$'))
+
+  close!
+endfunc
+
+" Test for the '2' flag in 'formatoptions'
+func Test_fo_2()
+  new
+  setlocal autoindent
+  setlocal formatoptions=t2
+  setlocal textwidth=30
+  call setline(1, ["\tfirst line of a paragraph.",
+        \ "second line of the same paragraph.",
+        \ "third line."])
+  normal gggqG
+  call assert_equal(["\tfirst line of a",
+        \ "paragraph.  second line of the",
+        \ "same paragraph.  third line."], getline(1, '$'))
+  close!
+endfunc
+
+" Test for formatting lines where only the first line has a comment.
+func Test_fo_gq_with_firstline_comment()
+  new
+  setlocal formatoptions=tcq
+  call setline(1, ['- one two', 'three'])
+  normal gggqG
+  call assert_equal(['- one two three'], getline(1, '$'))
+
+  %d
+  call setline(1, ['- one', '- two'])
+  normal gggqG
+  call assert_equal(['- one', '- two'], getline(1, '$'))
+  close!
+endfunc
+
+" Test for trying to join a comment line with a non-comment line
+func Test_join_comments()
+  new
+  call setline(1, ['one', '/* two */', 'three'])
+  normal gggqG
+  call assert_equal(['one', '/* two */', 'three'], getline(1, '$'))
+  close!
+endfunc
+
+" Test for using 'a' in 'formatoptions' with comments
+func Test_autoformat_comments()
+  new
+  setlocal formatoptions+=a
+  call feedkeys("a- one\n- two\n", 'xt')
+  call assert_equal(['- one', '- two', ''], getline(1, '$'))
+
+  %d
+  call feedkeys("a\none\n", 'xt')
+  call assert_equal(['', 'one', ''], getline(1, '$'))
+
+  setlocal formatoptions+=aw
+  %d
+  call feedkeys("aone \ntwo\n", 'xt')
+  call assert_equal(['one two', ''], getline(1, '$'))
+
+  %d
+  call feedkeys("aone\ntwo\n", 'xt')
+  call assert_equal(['one', 'two', ''], getline(1, '$'))
+
+  close!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    686,
+/**/
     685,
 /**/
     684,