142093c0eSBram Moolenaar" Tests for diff mode
242093c0eSBram Moolenaar
342093c0eSBram Moolenaarfunc Test_diff_fold_sync()
442093c0eSBram Moolenaar  enew!
542093c0eSBram Moolenaar  let l = range(50)
642093c0eSBram Moolenaar  call setline(1, l)
742093c0eSBram Moolenaar  diffthis
842093c0eSBram Moolenaar  let winone = win_getid()
942093c0eSBram Moolenaar  new
1042093c0eSBram Moolenaar  let l[25] = 'diff'
1142093c0eSBram Moolenaar  call setline(1, l)
1242093c0eSBram Moolenaar  diffthis
1342093c0eSBram Moolenaar  let wintwo = win_getid()
1442093c0eSBram Moolenaar  " line 15 is inside the closed fold
1542093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
1642093c0eSBram Moolenaar  call win_gotoid(winone)
1742093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
1842093c0eSBram Moolenaar  " open the fold
1942093c0eSBram Moolenaar  normal zv
2042093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2142093c0eSBram Moolenaar  " fold in other window must have opened too
2242093c0eSBram Moolenaar  call win_gotoid(wintwo)
2342093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2442093c0eSBram Moolenaar
2542093c0eSBram Moolenaar  " cursor position is in sync
2642093c0eSBram Moolenaar  normal 23G
2742093c0eSBram Moolenaar  call win_gotoid(winone)
2842093c0eSBram Moolenaar  call assert_equal(23, getcurpos()[1])
2942093c0eSBram Moolenaar
3042093c0eSBram Moolenaar  windo diffoff
3142093c0eSBram Moolenaar  close!
3242093c0eSBram Moolenaar  set nomodified
3342093c0eSBram Moolenaarendfunc
3442093c0eSBram Moolenaar
3542093c0eSBram Moolenaarfunc Test_vert_split()
3642093c0eSBram Moolenaar  " Disable the title to avoid xterm keeping the wrong one.
3742093c0eSBram Moolenaar  set notitle noicon
3842093c0eSBram Moolenaar  new
3942093c0eSBram Moolenaar  let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee']
4042093c0eSBram Moolenaar  call setline(1, l)
4142093c0eSBram Moolenaar  w! Xtest
4242093c0eSBram Moolenaar  normal dd
4342093c0eSBram Moolenaar  $
4442093c0eSBram Moolenaar  put
4542093c0eSBram Moolenaar  normal kkrXoxxx
4642093c0eSBram Moolenaar  w! Xtest2
4742093c0eSBram Moolenaar  file Nop
4842093c0eSBram Moolenaar  normal ggoyyyjjjozzzz
4942093c0eSBram Moolenaar  set foldmethod=marker foldcolumn=4
5042093c0eSBram Moolenaar  call assert_equal(0, &diff)
5142093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
5242093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
5342093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
5442093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
5542093c0eSBram Moolenaar  call assert_equal(1, &wrap)
5642093c0eSBram Moolenaar
5742093c0eSBram Moolenaar  vert diffsplit Xtest
5842093c0eSBram Moolenaar  vert diffsplit Xtest2
5942093c0eSBram Moolenaar  call assert_equal(1, &diff)
6042093c0eSBram Moolenaar  call assert_equal('diff', &foldmethod)
6142093c0eSBram Moolenaar  call assert_equal(2, &foldcolumn)
6242093c0eSBram Moolenaar  call assert_equal(1, &scrollbind)
6342093c0eSBram Moolenaar  call assert_equal(1, &cursorbind)
6442093c0eSBram Moolenaar  call assert_equal(0, &wrap)
6542093c0eSBram Moolenaar
6642093c0eSBram Moolenaar  let diff_fdm = &fdm
6742093c0eSBram Moolenaar  let diff_fdc = &fdc
6842093c0eSBram Moolenaar  " repeat entering diff mode here to see if this saves the wrong settings
6942093c0eSBram Moolenaar  diffthis
7042093c0eSBram Moolenaar  " jump to second window for a moment to have filler line appear at start of
7142093c0eSBram Moolenaar  " first window
7242093c0eSBram Moolenaar  wincmd w
7342093c0eSBram Moolenaar  normal gg
7442093c0eSBram Moolenaar  wincmd p
7542093c0eSBram Moolenaar  normal gg
7642093c0eSBram Moolenaar  call assert_equal(2, winline())
7742093c0eSBram Moolenaar  normal j
7842093c0eSBram Moolenaar  call assert_equal(4, winline())
7942093c0eSBram Moolenaar  normal j
8042093c0eSBram Moolenaar  call assert_equal(5, winline())
8142093c0eSBram Moolenaar  normal j
8242093c0eSBram Moolenaar  call assert_equal(6, winline())
8342093c0eSBram Moolenaar  normal j
8442093c0eSBram Moolenaar  call assert_equal(8, winline())
8542093c0eSBram Moolenaar  normal j
8642093c0eSBram Moolenaar  call assert_equal(9, winline())
8742093c0eSBram Moolenaar
8842093c0eSBram Moolenaar  wincmd w
8942093c0eSBram Moolenaar  normal gg
9042093c0eSBram Moolenaar  call assert_equal(1, winline())
9142093c0eSBram Moolenaar  normal j
9242093c0eSBram Moolenaar  call assert_equal(2, winline())
9342093c0eSBram Moolenaar  normal j
9442093c0eSBram Moolenaar  call assert_equal(4, winline())
9542093c0eSBram Moolenaar  normal j
9642093c0eSBram Moolenaar  call assert_equal(5, winline())
9742093c0eSBram Moolenaar  normal j
9842093c0eSBram Moolenaar  call assert_equal(8, winline())
9942093c0eSBram Moolenaar
10042093c0eSBram Moolenaar  wincmd w
10142093c0eSBram Moolenaar  normal gg
10242093c0eSBram Moolenaar  call assert_equal(2, winline())
10342093c0eSBram Moolenaar  normal j
10442093c0eSBram Moolenaar  call assert_equal(3, winline())
10542093c0eSBram Moolenaar  normal j
10642093c0eSBram Moolenaar  call assert_equal(4, winline())
10742093c0eSBram Moolenaar  normal j
10842093c0eSBram Moolenaar  call assert_equal(5, winline())
10942093c0eSBram Moolenaar  normal j
11042093c0eSBram Moolenaar  call assert_equal(6, winline())
11142093c0eSBram Moolenaar  normal j
11242093c0eSBram Moolenaar  call assert_equal(7, winline())
11342093c0eSBram Moolenaar  normal j
11442093c0eSBram Moolenaar  call assert_equal(8, winline())
11542093c0eSBram Moolenaar
11642093c0eSBram Moolenaar  " Test diffoff
11742093c0eSBram Moolenaar  diffoff!
11842093c0eSBram Moolenaar  1wincmd 2
11942093c0eSBram Moolenaar  let &diff = 1
12042093c0eSBram Moolenaar  let &fdm = diff_fdm
12142093c0eSBram Moolenaar  let &fdc = diff_fdc
12242093c0eSBram Moolenaar  4wincmd w
12342093c0eSBram Moolenaar  diffoff!
12442093c0eSBram Moolenaar  1wincmd w
12542093c0eSBram Moolenaar  call assert_equal(0, &diff)
12642093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
12742093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
12842093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
12942093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
13042093c0eSBram Moolenaar  call assert_equal(1, &wrap)
13142093c0eSBram Moolenaar
13242093c0eSBram Moolenaar  wincmd w
13342093c0eSBram Moolenaar  call assert_equal(0, &diff)
13442093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
13542093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
13642093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
13742093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
13842093c0eSBram Moolenaar  call assert_equal(1, &wrap)
13942093c0eSBram Moolenaar
14042093c0eSBram Moolenaar  wincmd w
14142093c0eSBram Moolenaar  call assert_equal(0, &diff)
14242093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
14342093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
14442093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
14542093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
14642093c0eSBram Moolenaar  call assert_equal(1, &wrap)
14742093c0eSBram Moolenaar
148623cf88fSBram Moolenaar  call delete('Xtest')
149623cf88fSBram Moolenaar  call delete('Xtest2')
15042093c0eSBram Moolenaar  windo bw!
15142093c0eSBram Moolenaarendfunc
15242093c0eSBram Moolenaar
15342093c0eSBram Moolenaarfunc Test_filler_lines()
15442093c0eSBram Moolenaar  " Test that diffing shows correct filler lines
15542093c0eSBram Moolenaar  enew!
15642093c0eSBram Moolenaar  put =range(4,10)
15742093c0eSBram Moolenaar  1d _
15842093c0eSBram Moolenaar  vnew
15942093c0eSBram Moolenaar  put =range(1,10)
16042093c0eSBram Moolenaar  1d _
16142093c0eSBram Moolenaar  windo diffthis
16242093c0eSBram Moolenaar  wincmd h
16342093c0eSBram Moolenaar  call assert_equal(1, line('w0'))
16442093c0eSBram Moolenaar  unlet! diff_fdm diff_fdc
16590d121faSBram Moolenaar  windo diffoff
16690d121faSBram Moolenaar  bwipe!
16790d121faSBram Moolenaar  enew!
16890d121faSBram Moolenaarendfunc
16942093c0eSBram Moolenaar
17090d121faSBram Moolenaarfunc Test_diffget_diffput()
17190d121faSBram Moolenaar  enew!
17290d121faSBram Moolenaar  let l = range(50)
17390d121faSBram Moolenaar  call setline(1, l)
17490d121faSBram Moolenaar  call assert_fails('diffget', 'E99:')
17590d121faSBram Moolenaar  diffthis
17690d121faSBram Moolenaar  call assert_fails('diffget', 'E100:')
17790d121faSBram Moolenaar  new
17890d121faSBram Moolenaar  let l[10] = 'one'
17990d121faSBram Moolenaar  let l[20] = 'two'
18090d121faSBram Moolenaar  let l[30] = 'three'
18190d121faSBram Moolenaar  let l[40] = 'four'
18290d121faSBram Moolenaar  call setline(1, l)
18390d121faSBram Moolenaar  diffthis
18490d121faSBram Moolenaar  call assert_equal('one', getline(11))
18590d121faSBram Moolenaar  11diffget
18690d121faSBram Moolenaar  call assert_equal('10', getline(11))
18790d121faSBram Moolenaar  21diffput
18890d121faSBram Moolenaar  wincmd w
18990d121faSBram Moolenaar  call assert_equal('two', getline(21))
19090d121faSBram Moolenaar  normal 31Gdo
19190d121faSBram Moolenaar  call assert_equal('three', getline(31))
19290d121faSBram Moolenaar  call assert_equal('40', getline(41))
19390d121faSBram Moolenaar  normal 41Gdp
19490d121faSBram Moolenaar  wincmd w
19590d121faSBram Moolenaar  call assert_equal('40', getline(41))
19690d121faSBram Moolenaar  new
19790d121faSBram Moolenaar  diffthis
19890d121faSBram Moolenaar  call assert_fails('diffget', 'E101:')
19990d121faSBram Moolenaar
20090d121faSBram Moolenaar  windo diffoff
20190d121faSBram Moolenaar  bwipe!
20290d121faSBram Moolenaar  bwipe!
20390d121faSBram Moolenaar  enew!
20442093c0eSBram Moolenaarendfunc
205e67d546fSBram Moolenaar
206e67d546fSBram Moolenaarfunc Test_diffoff()
207e67d546fSBram Moolenaar  enew!
208e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
209e67d546fSBram Moolenaar  let normattr = screenattr(1, 1)
210e67d546fSBram Moolenaar  diffthis
211e67d546fSBram Moolenaar  botright vert new
212e67d546fSBram Moolenaar  call setline(1, ['One', '', 'Two', 'Three'])
213e67d546fSBram Moolenaar  diffthis
214e67d546fSBram Moolenaar  redraw
21525ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
216e67d546fSBram Moolenaar  diffoff!
217e67d546fSBram Moolenaar  redraw
218e67d546fSBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
219e67d546fSBram Moolenaar  bwipe!
220e67d546fSBram Moolenaar  bwipe!
221e67d546fSBram Moolenaarendfunc
222025e3e0bSBram Moolenaar
22325ea0544SBram Moolenaarfunc Test_diffoff_hidden()
22425ea0544SBram Moolenaar  set diffopt=filler,foldcolumn:0
22525ea0544SBram Moolenaar  e! one
22625ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
22725ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
22825ea0544SBram Moolenaar  diffthis
22925ea0544SBram Moolenaar  botright vert new two
23025ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
23125ea0544SBram Moolenaar  diffthis
23225ea0544SBram Moolenaar  redraw
23325ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
23425ea0544SBram Moolenaar  set hidden
23525ea0544SBram Moolenaar  close
23625ea0544SBram Moolenaar  redraw
23725ea0544SBram Moolenaar  " diffing with hidden buffer two
23825ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
23925ea0544SBram Moolenaar  diffoff
24025ea0544SBram Moolenaar  redraw
24125ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
24225ea0544SBram Moolenaar  diffthis
24325ea0544SBram Moolenaar  redraw
24425ea0544SBram Moolenaar  " still diffing with hidden buffer two
24525ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
24625ea0544SBram Moolenaar  diffoff!
24725ea0544SBram Moolenaar  redraw
24825ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
24925ea0544SBram Moolenaar  diffthis
25025ea0544SBram Moolenaar  redraw
25125ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
25225ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
25325ea0544SBram Moolenaar
25425ea0544SBram Moolenaar  bwipe!
25525ea0544SBram Moolenaar  bwipe!
25625ea0544SBram Moolenaar  set hidden& diffopt&
25725ea0544SBram Moolenaarendfunc
25825ea0544SBram Moolenaar
259025e3e0bSBram Moolenaarfunc Test_setting_cursor()
260025e3e0bSBram Moolenaar  new Xtest1
261025e3e0bSBram Moolenaar  put =range(1,90)
262025e3e0bSBram Moolenaar  wq
263025e3e0bSBram Moolenaar  new Xtest2
264025e3e0bSBram Moolenaar  put =range(1,100)
265025e3e0bSBram Moolenaar  wq
266025e3e0bSBram Moolenaar
267025e3e0bSBram Moolenaar  tabe Xtest2
268025e3e0bSBram Moolenaar  $
269025e3e0bSBram Moolenaar  diffsp Xtest1
270025e3e0bSBram Moolenaar  tabclose
271025e3e0bSBram Moolenaar
272025e3e0bSBram Moolenaar  call delete('Xtest1')
273025e3e0bSBram Moolenaar  call delete('Xtest2')
274025e3e0bSBram Moolenaarendfunc
275*aeb661e1SBram Moolenaar
276*aeb661e1SBram Moolenaarfunc Test_diff_move_to()
277*aeb661e1SBram Moolenaar  new
278*aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
279*aeb661e1SBram Moolenaar  diffthis
280*aeb661e1SBram Moolenaar  vnew
281*aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
282*aeb661e1SBram Moolenaar  diffthis
283*aeb661e1SBram Moolenaar  norm ]c
284*aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
285*aeb661e1SBram Moolenaar  norm 3]c
286*aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
287*aeb661e1SBram Moolenaar  norm 10]c
288*aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
289*aeb661e1SBram Moolenaar  norm [c
290*aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
291*aeb661e1SBram Moolenaar  norm 2[c
292*aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
293*aeb661e1SBram Moolenaar  norm 10[c
294*aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
295*aeb661e1SBram Moolenaar  %bwipe!
296*aeb661e1SBram Moolenaarendfunc
297*aeb661e1SBram Moolenaar
298*aeb661e1SBram Moolenaarfunc Test_diffpatch()
299*aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
300*aeb661e1SBram Moolenaar  if !executable('patch') || !has('unix')
301*aeb661e1SBram Moolenaar    return
302*aeb661e1SBram Moolenaar  endif
303*aeb661e1SBram Moolenaar  new
304*aeb661e1SBram Moolenaar  insert
305*aeb661e1SBram Moolenaar***************
306*aeb661e1SBram Moolenaar*** 1,3 ****
307*aeb661e1SBram Moolenaar  1
308*aeb661e1SBram Moolenaar! 2
309*aeb661e1SBram Moolenaar  3
310*aeb661e1SBram Moolenaar--- 1,4 ----
311*aeb661e1SBram Moolenaar  1
312*aeb661e1SBram Moolenaar! 2x
313*aeb661e1SBram Moolenaar  3
314*aeb661e1SBram Moolenaar+ 4
315*aeb661e1SBram Moolenaar.
316*aeb661e1SBram Moolenaar  saveas Xpatch
317*aeb661e1SBram Moolenaar  bwipe!
318*aeb661e1SBram Moolenaar  new
319*aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
320*aeb661e1SBram Moolenaar  call setline(1, ['1', '2', '3'])
321*aeb661e1SBram Moolenaar  diffpatch Xpatch
322*aeb661e1SBram Moolenaar  call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
323*aeb661e1SBram Moolenaar  call delete('Xpatch')
324*aeb661e1SBram Moolenaar  bwipe!
325*aeb661e1SBram Moolenaarendfunc
326*aeb661e1SBram Moolenaar
327*aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
328*aeb661e1SBram Moolenaar  for i in range(1, 8)
329*aeb661e1SBram Moolenaar    exe "new Xtest" . i
330*aeb661e1SBram Moolenaar    diffthis
331*aeb661e1SBram Moolenaar  endfor
332*aeb661e1SBram Moolenaar  new Xtest9
333*aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
334*aeb661e1SBram Moolenaar  %bwipe!
335*aeb661e1SBram Moolenaarendfunc
336*aeb661e1SBram Moolenaar
337*aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
338*aeb661e1SBram Moolenaar  new
339*aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
340*aeb661e1SBram Moolenaar  setl nomodifiable
341*aeb661e1SBram Moolenaar  diffthis
342*aeb661e1SBram Moolenaar  vnew
343*aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
344*aeb661e1SBram Moolenaar  diffthis
345*aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
346*aeb661e1SBram Moolenaar  setl nomodifiable
347*aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
348*aeb661e1SBram Moolenaar  %bwipe!
349*aeb661e1SBram Moolenaarendfunc
350