changeset 11430:eba1a8c6e21d v8.0.0599

patch 8.0.0599: diff mode is insufficiently tested commit https://github.com/vim/vim/commit/79a213d6a4e909703524a7f1ad985c7bd40650a6 Author: Bram Moolenaar <Bram@vim.org> Date: Tue May 16 13:15:18 2017 +0200 patch 8.0.0599: diff mode is insufficiently tested Problem: diff mode is insufficiently tested Solution: Add more test cases. (Dominique Pelle, closes https://github.com/vim/vim/issues/1685)
author Christian Brabandt <cb@256bit.org>
date Tue, 16 May 2017 13:30:04 +0200
parents f1c35307bfef
children 1597b1207296
files src/diff.c src/testdir/test_diffmode.vim src/version.c
diffstat 3 files changed, 190 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/diff.c
+++ b/src/diff.c
@@ -1244,7 +1244,8 @@ ex_diffoff(exarg_T *eap)
 		    wp->w_p_wrap = wp->w_p_wrap_save;
 #ifdef FEAT_FOLDING
 		free_string_option(wp->w_p_fdm);
-		wp->w_p_fdm = vim_strsave(wp->w_p_fdm_save);
+		wp->w_p_fdm = vim_strsave(
+		    *wp->w_p_fdm_save ? wp->w_p_fdm_save : (char_u*)"manual");
 
 		if (wp->w_p_fdc == diff_foldcolumn)
 		    wp->w_p_fdc = wp->w_p_fdc_save;
--- a/src/testdir/test_diffmode.vim
+++ b/src/testdir/test_diffmode.vim
@@ -199,14 +199,69 @@ func Test_diffget_diffput()
   call assert_fails('diffget', 'E101:')
 
   windo diffoff
-  bwipe!
-  bwipe!
-  enew!
+  %bwipe!
+endfunc
+
+func Test_dp_do_buffer()
+  e! one
+  let bn1=bufnr('%')
+  let l = range(60)
+  call setline(1, l)
+  diffthis
+
+  new two
+  let l[10] = 'one'
+  let l[20] = 'two'
+  let l[30] = 'three'
+  let l[40] = 'four'
+  let l[50] = 'five'
+  call setline(1, l)
+  diffthis
+
+  " dp and do with invalid buffer number.
+  11
+  call assert_fails('norm 99999dp', 'E102:')
+  call assert_fails('norm 99999do', 'E102:')
+  call assert_fails('diffput non_existing_buffer', 'E94:')
+  call assert_fails('diffget non_existing_buffer', 'E94:')
+
+  " dp and do with valid buffer number.
+  call assert_equal('one', getline('.'))
+  exe 'norm ' . bn1 . 'do'
+  call assert_equal('10', getline('.'))
+  21
+  call assert_equal('two', getline('.'))
+  diffget one
+  call assert_equal('20', getline('.'))
+
+  31
+  exe 'norm ' . bn1 . 'dp'
+  41
+  diffput one
+  wincmd w
+  31
+  call assert_equal('three', getline('.'))
+  41
+  call assert_equal('four', getline('.'))
+
+  " dp and do with buffer number which is not in diff mode.
+  new not_in_diff_mode
+  let bn3=bufnr('%')
+  wincmd w
+  51
+  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
+  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
+  call assert_fails('diffput not_in_diff_mode', 'E94:')
+  call assert_fails('diffget not_in_diff_mode', 'E94:')
+
+  windo diffoff
+  %bwipe!
 endfunc
 
 func Test_diffoff()
   enew!
   call setline(1, ['Two', 'Three'])
+  redraw
   let normattr = screenattr(1, 1)
   diffthis
   botright vert new
@@ -221,10 +276,107 @@ func Test_diffoff()
   bwipe!
 endfunc
 
+func Test_diffopt_icase()
+  set diffopt=icase,foldcolumn:0
+
+  e one
+  call setline(1, ['One', 'Two', 'Three', 'Four'])
+  redraw
+  let normattr = screenattr(1, 1)
+  diffthis
+
+  botright vert new two
+  call setline(1, ['one', 'TWO', 'Three ', 'Four'])
+  diffthis
+
+  redraw
+  call assert_equal(normattr, screenattr(1, 1))
+  call assert_equal(normattr, screenattr(2, 1))
+  call assert_notequal(normattr, screenattr(3, 1))
+  call assert_equal(normattr, screenattr(4, 1))
+
+  diffoff!
+  %bwipe!
+  set diffopt&
+endfunc
+
+func Test_diffopt_iwhite()
+  set diffopt=iwhite,foldcolumn:0
+
+  e one
+  " Difference in trailing spaces should be ignored,
+  " but not other space differences.
+  call setline(1, ["One \t", 'Two', 'Three', 'Four'])
+  redraw
+  let normattr = screenattr(1, 1)
+  diffthis
+
+  botright vert new two
+  call setline(1, ["One\t ", "Two\t ", 'Three', ' Four'])
+  diffthis
+
+  redraw
+  call assert_equal(normattr, screenattr(1, 1))
+  call assert_equal(normattr, screenattr(2, 1))
+  call assert_equal(normattr, screenattr(3, 1))
+  call assert_notequal(normattr, screenattr(4, 1))
+
+  diffoff!
+  %bwipe!
+  set diffopt&
+endfunc
+
+func Test_diffopt_context()
+  enew!
+  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
+  diffthis
+  new
+  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
+  diffthis
+
+  set diffopt=context:2
+  call assert_equal('+--  2 lines: 1', foldtextresult(1))
+  set diffopt=context:1
+  call assert_equal('+--  3 lines: 1', foldtextresult(1))
+
+  diffoff!
+  %bwipe!
+  set diffopt&
+endfunc
+
+func Test_diffopt_horizontal()
+  set diffopt=horizontal
+  diffsplit
+
+  call assert_equal(&columns, winwidth(1))
+  call assert_equal(&columns, winwidth(2))
+  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
+  call assert_inrange(0, 1, winheight(1) - winheight(2))
+
+  set diffopt&
+  diffoff!
+  %bwipe
+endfunc
+
+func Test_diffopt_vertical()
+  set diffopt=vertical
+  diffsplit
+
+  call assert_equal(&lines - 2, winheight(1))
+  call assert_equal(&lines - 2, winheight(2))
+  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
+  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
+
+  set diffopt&
+  diffoff!
+  %bwipe
+endfunc
+
 func Test_diffoff_hidden()
   set diffopt=filler,foldcolumn:0
   e! one
   call setline(1, ['Two', 'Three'])
+  redraw
   let normattr = screenattr(1, 1)
   diffthis
   botright vert new two
@@ -296,6 +448,37 @@ func Test_diff_move_to()
   %bwipe!
 endfunc
 
+func Test_diffexpr()
+  if !executable('diff')
+    return
+  endif
+
+  func DiffExpr()
+    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>' . v:fname_out
+  endfunc
+  set diffexpr=DiffExpr()
+  set diffopt=foldcolumn:0
+
+  enew!
+  call setline(1, ['one', 'two', 'three'])
+  redraw
+  let normattr = screenattr(1, 1)
+  diffthis
+
+  botright vert new
+  call setline(1, ['one', 'two', 'three.'])
+  diffthis
+
+  redraw
+  call assert_equal(normattr, screenattr(1, 1))
+  call assert_equal(normattr, screenattr(2, 1))
+  call assert_notequal(normattr, screenattr(3, 1))
+
+  diffoff!
+  %bwipe!
+  set diffexpr& diffopt&
+endfunc
+
 func Test_diffpatch()
   " The patch program on MS-Windows may fail or hang.
   if !executable('patch') || !has('unix')
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    599,
+/**/
     598,
 /**/
     597,