forked from aniani/vim
		
	patch 8.2.0686: formatoptions not sufficiently tested
Problem: Formatoptions not sufficiently tested. Solution: Add a few more tests. (Yegappan Lakshmanan, closes #6031)
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -746,6 +746,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     686, | ||||
| /**/ | ||||
|     685, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user