@@ -424,6 +424,15 @@ func Test_format_align()
\ ], getline ( 1 , '$' ) )
enew !
" align text with 'wrapmargin'
50 vnew
call setline ( 1 , ['Vim' ])
setl textwidth = 0
setl wrapmargin = 30
right
call assert_equal ( "\t\t Vim" , getline ( 1 ) )
q !
set tw &
endfunc
@@ -931,4 +940,217 @@ func Test_substitute()
call assert_equal ( 'a1 a2 a3 a' , substitute ( '1 2 3 ' , '\zs' , 'a' , 'g' ) )
endfunc
" Test for 'a' and 'w' flags in 'formatoptions'
func Test_fo_a_w ( )
new
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 = 1 aw
%d
call setline ( 1 , '. foo' )
normal 72 ig
call feedkeys ( 'a uu uu uu' , 'xt' )
call assert_equal ( 'g uu uu ' , getline ( 1 ) [-8 :])
call assert_equal ( ['uu. foo' ], getline ( 2 , '$' ) )
" using backspace or "x" triggers reformat
call setline ( 1 , ['1 2 3 4 5 ' , '6 7 8 9' ])
set tw = 10
set fo = taw
set bs = indent , eol , start
exe "normal 1G4la\<BS>\<BS>\<Esc>"
call assert_equal ( ['1 2 4 5 6 ' , '7 8 9' ], getline ( 1 , 2 ) )
exe "normal f4xx"
call assert_equal ( ['1 2 5 6 7 ' , '8 9' ], getline ( 1 , 2 ) )
set tw = 0
set fo &
%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