142093c0eSBram Moolenaar" Tests for diff mode
2c3c766eaSBram Moolenaarset belloff=all
342093c0eSBram Moolenaar
442093c0eSBram Moolenaarfunc Test_diff_fold_sync()
542093c0eSBram Moolenaar  enew!
642093c0eSBram Moolenaar  let l = range(50)
742093c0eSBram Moolenaar  call setline(1, l)
842093c0eSBram Moolenaar  diffthis
942093c0eSBram Moolenaar  let winone = win_getid()
1042093c0eSBram Moolenaar  new
1142093c0eSBram Moolenaar  let l[25] = 'diff'
1242093c0eSBram Moolenaar  call setline(1, l)
1342093c0eSBram Moolenaar  diffthis
1442093c0eSBram Moolenaar  let wintwo = win_getid()
1542093c0eSBram Moolenaar  " line 15 is inside the closed fold
1642093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
1742093c0eSBram Moolenaar  call win_gotoid(winone)
1842093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
1942093c0eSBram Moolenaar  " open the fold
2042093c0eSBram Moolenaar  normal zv
2142093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2242093c0eSBram Moolenaar  " fold in other window must have opened too
2342093c0eSBram Moolenaar  call win_gotoid(wintwo)
2442093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2542093c0eSBram Moolenaar
2642093c0eSBram Moolenaar  " cursor position is in sync
2742093c0eSBram Moolenaar  normal 23G
2842093c0eSBram Moolenaar  call win_gotoid(winone)
2942093c0eSBram Moolenaar  call assert_equal(23, getcurpos()[1])
3042093c0eSBram Moolenaar
3142093c0eSBram Moolenaar  windo diffoff
3242093c0eSBram Moolenaar  close!
3342093c0eSBram Moolenaar  set nomodified
3442093c0eSBram Moolenaarendfunc
3542093c0eSBram Moolenaar
3642093c0eSBram Moolenaarfunc Test_vert_split()
3742093c0eSBram Moolenaar  " Disable the title to avoid xterm keeping the wrong one.
3842093c0eSBram Moolenaar  set notitle noicon
3942093c0eSBram Moolenaar  new
4042093c0eSBram Moolenaar  let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee']
4142093c0eSBram Moolenaar  call setline(1, l)
4242093c0eSBram Moolenaar  w! Xtest
4342093c0eSBram Moolenaar  normal dd
4442093c0eSBram Moolenaar  $
4542093c0eSBram Moolenaar  put
4642093c0eSBram Moolenaar  normal kkrXoxxx
4742093c0eSBram Moolenaar  w! Xtest2
4842093c0eSBram Moolenaar  file Nop
4942093c0eSBram Moolenaar  normal ggoyyyjjjozzzz
5042093c0eSBram Moolenaar  set foldmethod=marker foldcolumn=4
5142093c0eSBram Moolenaar  call assert_equal(0, &diff)
5242093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
5342093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
5442093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
5542093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
5642093c0eSBram Moolenaar  call assert_equal(1, &wrap)
5742093c0eSBram Moolenaar
5842093c0eSBram Moolenaar  vert diffsplit Xtest
5942093c0eSBram Moolenaar  vert diffsplit Xtest2
6042093c0eSBram Moolenaar  call assert_equal(1, &diff)
6142093c0eSBram Moolenaar  call assert_equal('diff', &foldmethod)
6242093c0eSBram Moolenaar  call assert_equal(2, &foldcolumn)
6342093c0eSBram Moolenaar  call assert_equal(1, &scrollbind)
6442093c0eSBram Moolenaar  call assert_equal(1, &cursorbind)
6542093c0eSBram Moolenaar  call assert_equal(0, &wrap)
6642093c0eSBram Moolenaar
6742093c0eSBram Moolenaar  let diff_fdm = &fdm
6842093c0eSBram Moolenaar  let diff_fdc = &fdc
6942093c0eSBram Moolenaar  " repeat entering diff mode here to see if this saves the wrong settings
7042093c0eSBram Moolenaar  diffthis
7142093c0eSBram Moolenaar  " jump to second window for a moment to have filler line appear at start of
7242093c0eSBram Moolenaar  " first window
7342093c0eSBram Moolenaar  wincmd w
7442093c0eSBram Moolenaar  normal gg
7542093c0eSBram Moolenaar  wincmd p
7642093c0eSBram Moolenaar  normal gg
7742093c0eSBram Moolenaar  call assert_equal(2, winline())
7842093c0eSBram Moolenaar  normal j
7942093c0eSBram Moolenaar  call assert_equal(4, winline())
8042093c0eSBram Moolenaar  normal j
8142093c0eSBram Moolenaar  call assert_equal(5, winline())
8242093c0eSBram Moolenaar  normal j
8342093c0eSBram Moolenaar  call assert_equal(6, winline())
8442093c0eSBram Moolenaar  normal j
8542093c0eSBram Moolenaar  call assert_equal(8, winline())
8642093c0eSBram Moolenaar  normal j
8742093c0eSBram Moolenaar  call assert_equal(9, winline())
8842093c0eSBram Moolenaar
8942093c0eSBram Moolenaar  wincmd w
9042093c0eSBram Moolenaar  normal gg
9142093c0eSBram Moolenaar  call assert_equal(1, winline())
9242093c0eSBram Moolenaar  normal j
9342093c0eSBram Moolenaar  call assert_equal(2, winline())
9442093c0eSBram Moolenaar  normal j
9542093c0eSBram Moolenaar  call assert_equal(4, winline())
9642093c0eSBram Moolenaar  normal j
9742093c0eSBram Moolenaar  call assert_equal(5, winline())
9842093c0eSBram Moolenaar  normal j
9942093c0eSBram Moolenaar  call assert_equal(8, winline())
10042093c0eSBram Moolenaar
10142093c0eSBram Moolenaar  wincmd w
10242093c0eSBram Moolenaar  normal gg
10342093c0eSBram Moolenaar  call assert_equal(2, winline())
10442093c0eSBram Moolenaar  normal j
10542093c0eSBram Moolenaar  call assert_equal(3, winline())
10642093c0eSBram Moolenaar  normal j
10742093c0eSBram Moolenaar  call assert_equal(4, winline())
10842093c0eSBram Moolenaar  normal j
10942093c0eSBram Moolenaar  call assert_equal(5, winline())
11042093c0eSBram Moolenaar  normal j
11142093c0eSBram Moolenaar  call assert_equal(6, winline())
11242093c0eSBram Moolenaar  normal j
11342093c0eSBram Moolenaar  call assert_equal(7, winline())
11442093c0eSBram Moolenaar  normal j
11542093c0eSBram Moolenaar  call assert_equal(8, winline())
11642093c0eSBram Moolenaar
11742093c0eSBram Moolenaar  " Test diffoff
11842093c0eSBram Moolenaar  diffoff!
11942093c0eSBram Moolenaar  1wincmd 2
12042093c0eSBram Moolenaar  let &diff = 1
12142093c0eSBram Moolenaar  let &fdm = diff_fdm
12242093c0eSBram Moolenaar  let &fdc = diff_fdc
12342093c0eSBram Moolenaar  4wincmd w
12442093c0eSBram Moolenaar  diffoff!
12542093c0eSBram Moolenaar  1wincmd w
12642093c0eSBram Moolenaar  call assert_equal(0, &diff)
12742093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
12842093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
12942093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
13042093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
13142093c0eSBram Moolenaar  call assert_equal(1, &wrap)
13242093c0eSBram Moolenaar
13342093c0eSBram Moolenaar  wincmd w
13442093c0eSBram Moolenaar  call assert_equal(0, &diff)
13542093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
13642093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
13742093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
13842093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
13942093c0eSBram Moolenaar  call assert_equal(1, &wrap)
14042093c0eSBram Moolenaar
14142093c0eSBram Moolenaar  wincmd w
14242093c0eSBram Moolenaar  call assert_equal(0, &diff)
14342093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
14442093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
14542093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
14642093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
14742093c0eSBram Moolenaar  call assert_equal(1, &wrap)
14842093c0eSBram Moolenaar
149623cf88fSBram Moolenaar  call delete('Xtest')
150623cf88fSBram Moolenaar  call delete('Xtest2')
15142093c0eSBram Moolenaar  windo bw!
15242093c0eSBram Moolenaarendfunc
15342093c0eSBram Moolenaar
15442093c0eSBram Moolenaarfunc Test_filler_lines()
15542093c0eSBram Moolenaar  " Test that diffing shows correct filler lines
15642093c0eSBram Moolenaar  enew!
15742093c0eSBram Moolenaar  put =range(4,10)
15842093c0eSBram Moolenaar  1d _
15942093c0eSBram Moolenaar  vnew
16042093c0eSBram Moolenaar  put =range(1,10)
16142093c0eSBram Moolenaar  1d _
16242093c0eSBram Moolenaar  windo diffthis
16342093c0eSBram Moolenaar  wincmd h
16442093c0eSBram Moolenaar  call assert_equal(1, line('w0'))
16542093c0eSBram Moolenaar  unlet! diff_fdm diff_fdc
16690d121faSBram Moolenaar  windo diffoff
16790d121faSBram Moolenaar  bwipe!
16890d121faSBram Moolenaar  enew!
16990d121faSBram Moolenaarendfunc
17042093c0eSBram Moolenaar
17190d121faSBram Moolenaarfunc Test_diffget_diffput()
17290d121faSBram Moolenaar  enew!
17390d121faSBram Moolenaar  let l = range(50)
17490d121faSBram Moolenaar  call setline(1, l)
17590d121faSBram Moolenaar  call assert_fails('diffget', 'E99:')
17690d121faSBram Moolenaar  diffthis
17790d121faSBram Moolenaar  call assert_fails('diffget', 'E100:')
17890d121faSBram Moolenaar  new
17990d121faSBram Moolenaar  let l[10] = 'one'
18090d121faSBram Moolenaar  let l[20] = 'two'
18190d121faSBram Moolenaar  let l[30] = 'three'
18290d121faSBram Moolenaar  let l[40] = 'four'
18390d121faSBram Moolenaar  call setline(1, l)
18490d121faSBram Moolenaar  diffthis
18590d121faSBram Moolenaar  call assert_equal('one', getline(11))
18690d121faSBram Moolenaar  11diffget
18790d121faSBram Moolenaar  call assert_equal('10', getline(11))
18890d121faSBram Moolenaar  21diffput
18990d121faSBram Moolenaar  wincmd w
19090d121faSBram Moolenaar  call assert_equal('two', getline(21))
19190d121faSBram Moolenaar  normal 31Gdo
19290d121faSBram Moolenaar  call assert_equal('three', getline(31))
19390d121faSBram Moolenaar  call assert_equal('40', getline(41))
19490d121faSBram Moolenaar  normal 41Gdp
19590d121faSBram Moolenaar  wincmd w
19690d121faSBram Moolenaar  call assert_equal('40', getline(41))
19790d121faSBram Moolenaar  new
19890d121faSBram Moolenaar  diffthis
19990d121faSBram Moolenaar  call assert_fails('diffget', 'E101:')
20090d121faSBram Moolenaar
20190d121faSBram Moolenaar  windo diffoff
202*79a213d6SBram Moolenaar  %bwipe!
203*79a213d6SBram Moolenaarendfunc
204*79a213d6SBram Moolenaar
205*79a213d6SBram Moolenaarfunc Test_dp_do_buffer()
206*79a213d6SBram Moolenaar  e! one
207*79a213d6SBram Moolenaar  let bn1=bufnr('%')
208*79a213d6SBram Moolenaar  let l = range(60)
209*79a213d6SBram Moolenaar  call setline(1, l)
210*79a213d6SBram Moolenaar  diffthis
211*79a213d6SBram Moolenaar
212*79a213d6SBram Moolenaar  new two
213*79a213d6SBram Moolenaar  let l[10] = 'one'
214*79a213d6SBram Moolenaar  let l[20] = 'two'
215*79a213d6SBram Moolenaar  let l[30] = 'three'
216*79a213d6SBram Moolenaar  let l[40] = 'four'
217*79a213d6SBram Moolenaar  let l[50] = 'five'
218*79a213d6SBram Moolenaar  call setline(1, l)
219*79a213d6SBram Moolenaar  diffthis
220*79a213d6SBram Moolenaar
221*79a213d6SBram Moolenaar  " dp and do with invalid buffer number.
222*79a213d6SBram Moolenaar  11
223*79a213d6SBram Moolenaar  call assert_fails('norm 99999dp', 'E102:')
224*79a213d6SBram Moolenaar  call assert_fails('norm 99999do', 'E102:')
225*79a213d6SBram Moolenaar  call assert_fails('diffput non_existing_buffer', 'E94:')
226*79a213d6SBram Moolenaar  call assert_fails('diffget non_existing_buffer', 'E94:')
227*79a213d6SBram Moolenaar
228*79a213d6SBram Moolenaar  " dp and do with valid buffer number.
229*79a213d6SBram Moolenaar  call assert_equal('one', getline('.'))
230*79a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'do'
231*79a213d6SBram Moolenaar  call assert_equal('10', getline('.'))
232*79a213d6SBram Moolenaar  21
233*79a213d6SBram Moolenaar  call assert_equal('two', getline('.'))
234*79a213d6SBram Moolenaar  diffget one
235*79a213d6SBram Moolenaar  call assert_equal('20', getline('.'))
236*79a213d6SBram Moolenaar
237*79a213d6SBram Moolenaar  31
238*79a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'dp'
239*79a213d6SBram Moolenaar  41
240*79a213d6SBram Moolenaar  diffput one
241*79a213d6SBram Moolenaar  wincmd w
242*79a213d6SBram Moolenaar  31
243*79a213d6SBram Moolenaar  call assert_equal('three', getline('.'))
244*79a213d6SBram Moolenaar  41
245*79a213d6SBram Moolenaar  call assert_equal('four', getline('.'))
246*79a213d6SBram Moolenaar
247*79a213d6SBram Moolenaar  " dp and do with buffer number which is not in diff mode.
248*79a213d6SBram Moolenaar  new not_in_diff_mode
249*79a213d6SBram Moolenaar  let bn3=bufnr('%')
250*79a213d6SBram Moolenaar  wincmd w
251*79a213d6SBram Moolenaar  51
252*79a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
253*79a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
254*79a213d6SBram Moolenaar  call assert_fails('diffput not_in_diff_mode', 'E94:')
255*79a213d6SBram Moolenaar  call assert_fails('diffget not_in_diff_mode', 'E94:')
256*79a213d6SBram Moolenaar
257*79a213d6SBram Moolenaar  windo diffoff
258*79a213d6SBram Moolenaar  %bwipe!
25942093c0eSBram Moolenaarendfunc
260e67d546fSBram Moolenaar
261e67d546fSBram Moolenaarfunc Test_diffoff()
262e67d546fSBram Moolenaar  enew!
263e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
264*79a213d6SBram Moolenaar  redraw
265e67d546fSBram Moolenaar  let normattr = screenattr(1, 1)
266e67d546fSBram Moolenaar  diffthis
267e67d546fSBram Moolenaar  botright vert new
268e67d546fSBram Moolenaar  call setline(1, ['One', '', 'Two', 'Three'])
269e67d546fSBram Moolenaar  diffthis
270e67d546fSBram Moolenaar  redraw
27125ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
272e67d546fSBram Moolenaar  diffoff!
273e67d546fSBram Moolenaar  redraw
274e67d546fSBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
275e67d546fSBram Moolenaar  bwipe!
276e67d546fSBram Moolenaar  bwipe!
277e67d546fSBram Moolenaarendfunc
278025e3e0bSBram Moolenaar
279*79a213d6SBram Moolenaarfunc Test_diffopt_icase()
280*79a213d6SBram Moolenaar  set diffopt=icase,foldcolumn:0
281*79a213d6SBram Moolenaar
282*79a213d6SBram Moolenaar  e one
283*79a213d6SBram Moolenaar  call setline(1, ['One', 'Two', 'Three', 'Four'])
284*79a213d6SBram Moolenaar  redraw
285*79a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
286*79a213d6SBram Moolenaar  diffthis
287*79a213d6SBram Moolenaar
288*79a213d6SBram Moolenaar  botright vert new two
289*79a213d6SBram Moolenaar  call setline(1, ['one', 'TWO', 'Three ', 'Four'])
290*79a213d6SBram Moolenaar  diffthis
291*79a213d6SBram Moolenaar
292*79a213d6SBram Moolenaar  redraw
293*79a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
294*79a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
295*79a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
296*79a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
297*79a213d6SBram Moolenaar
298*79a213d6SBram Moolenaar  diffoff!
299*79a213d6SBram Moolenaar  %bwipe!
300*79a213d6SBram Moolenaar  set diffopt&
301*79a213d6SBram Moolenaarendfunc
302*79a213d6SBram Moolenaar
303*79a213d6SBram Moolenaarfunc Test_diffopt_iwhite()
304*79a213d6SBram Moolenaar  set diffopt=iwhite,foldcolumn:0
305*79a213d6SBram Moolenaar
306*79a213d6SBram Moolenaar  e one
307*79a213d6SBram Moolenaar  " Difference in trailing spaces should be ignored,
308*79a213d6SBram Moolenaar  " but not other space differences.
309*79a213d6SBram Moolenaar  call setline(1, ["One \t", 'Two', 'Three', 'Four'])
310*79a213d6SBram Moolenaar  redraw
311*79a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
312*79a213d6SBram Moolenaar  diffthis
313*79a213d6SBram Moolenaar
314*79a213d6SBram Moolenaar  botright vert new two
315*79a213d6SBram Moolenaar  call setline(1, ["One\t ", "Two\t ", 'Three', ' Four'])
316*79a213d6SBram Moolenaar  diffthis
317*79a213d6SBram Moolenaar
318*79a213d6SBram Moolenaar  redraw
319*79a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
320*79a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
321*79a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(3, 1))
322*79a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(4, 1))
323*79a213d6SBram Moolenaar
324*79a213d6SBram Moolenaar  diffoff!
325*79a213d6SBram Moolenaar  %bwipe!
326*79a213d6SBram Moolenaar  set diffopt&
327*79a213d6SBram Moolenaarendfunc
328*79a213d6SBram Moolenaar
329*79a213d6SBram Moolenaarfunc Test_diffopt_context()
330*79a213d6SBram Moolenaar  enew!
331*79a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
332*79a213d6SBram Moolenaar  diffthis
333*79a213d6SBram Moolenaar  new
334*79a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
335*79a213d6SBram Moolenaar  diffthis
336*79a213d6SBram Moolenaar
337*79a213d6SBram Moolenaar  set diffopt=context:2
338*79a213d6SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
339*79a213d6SBram Moolenaar  set diffopt=context:1
340*79a213d6SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
341*79a213d6SBram Moolenaar
342*79a213d6SBram Moolenaar  diffoff!
343*79a213d6SBram Moolenaar  %bwipe!
344*79a213d6SBram Moolenaar  set diffopt&
345*79a213d6SBram Moolenaarendfunc
346*79a213d6SBram Moolenaar
347*79a213d6SBram Moolenaarfunc Test_diffopt_horizontal()
348*79a213d6SBram Moolenaar  set diffopt=horizontal
349*79a213d6SBram Moolenaar  diffsplit
350*79a213d6SBram Moolenaar
351*79a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1))
352*79a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(2))
353*79a213d6SBram Moolenaar  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
354*79a213d6SBram Moolenaar  call assert_inrange(0, 1, winheight(1) - winheight(2))
355*79a213d6SBram Moolenaar
356*79a213d6SBram Moolenaar  set diffopt&
357*79a213d6SBram Moolenaar  diffoff!
358*79a213d6SBram Moolenaar  %bwipe
359*79a213d6SBram Moolenaarendfunc
360*79a213d6SBram Moolenaar
361*79a213d6SBram Moolenaarfunc Test_diffopt_vertical()
362*79a213d6SBram Moolenaar  set diffopt=vertical
363*79a213d6SBram Moolenaar  diffsplit
364*79a213d6SBram Moolenaar
365*79a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(1))
366*79a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(2))
367*79a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
368*79a213d6SBram Moolenaar  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
369*79a213d6SBram Moolenaar
370*79a213d6SBram Moolenaar  set diffopt&
371*79a213d6SBram Moolenaar  diffoff!
372*79a213d6SBram Moolenaar  %bwipe
373*79a213d6SBram Moolenaarendfunc
374*79a213d6SBram Moolenaar
37525ea0544SBram Moolenaarfunc Test_diffoff_hidden()
37625ea0544SBram Moolenaar  set diffopt=filler,foldcolumn:0
37725ea0544SBram Moolenaar  e! one
37825ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
379*79a213d6SBram Moolenaar  redraw
38025ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
38125ea0544SBram Moolenaar  diffthis
38225ea0544SBram Moolenaar  botright vert new two
38325ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
38425ea0544SBram Moolenaar  diffthis
38525ea0544SBram Moolenaar  redraw
38625ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
38725ea0544SBram Moolenaar  set hidden
38825ea0544SBram Moolenaar  close
38925ea0544SBram Moolenaar  redraw
39025ea0544SBram Moolenaar  " diffing with hidden buffer two
39125ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
39225ea0544SBram Moolenaar  diffoff
39325ea0544SBram Moolenaar  redraw
39425ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
39525ea0544SBram Moolenaar  diffthis
39625ea0544SBram Moolenaar  redraw
39725ea0544SBram Moolenaar  " still diffing with hidden buffer two
39825ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
39925ea0544SBram Moolenaar  diffoff!
40025ea0544SBram Moolenaar  redraw
40125ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
40225ea0544SBram Moolenaar  diffthis
40325ea0544SBram Moolenaar  redraw
40425ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
40525ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
40625ea0544SBram Moolenaar
40725ea0544SBram Moolenaar  bwipe!
40825ea0544SBram Moolenaar  bwipe!
40925ea0544SBram Moolenaar  set hidden& diffopt&
41025ea0544SBram Moolenaarendfunc
41125ea0544SBram Moolenaar
412025e3e0bSBram Moolenaarfunc Test_setting_cursor()
413025e3e0bSBram Moolenaar  new Xtest1
414025e3e0bSBram Moolenaar  put =range(1,90)
415025e3e0bSBram Moolenaar  wq
416025e3e0bSBram Moolenaar  new Xtest2
417025e3e0bSBram Moolenaar  put =range(1,100)
418025e3e0bSBram Moolenaar  wq
419025e3e0bSBram Moolenaar
420025e3e0bSBram Moolenaar  tabe Xtest2
421025e3e0bSBram Moolenaar  $
422025e3e0bSBram Moolenaar  diffsp Xtest1
423025e3e0bSBram Moolenaar  tabclose
424025e3e0bSBram Moolenaar
425025e3e0bSBram Moolenaar  call delete('Xtest1')
426025e3e0bSBram Moolenaar  call delete('Xtest2')
427025e3e0bSBram Moolenaarendfunc
428aeb661e1SBram Moolenaar
429aeb661e1SBram Moolenaarfunc Test_diff_move_to()
430aeb661e1SBram Moolenaar  new
431aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
432aeb661e1SBram Moolenaar  diffthis
433aeb661e1SBram Moolenaar  vnew
434aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
435aeb661e1SBram Moolenaar  diffthis
436aeb661e1SBram Moolenaar  norm ]c
437aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
438aeb661e1SBram Moolenaar  norm 3]c
439aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
440aeb661e1SBram Moolenaar  norm 10]c
441aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
442aeb661e1SBram Moolenaar  norm [c
443aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
444aeb661e1SBram Moolenaar  norm 2[c
445aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
446aeb661e1SBram Moolenaar  norm 10[c
447aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
448aeb661e1SBram Moolenaar  %bwipe!
449aeb661e1SBram Moolenaarendfunc
450aeb661e1SBram Moolenaar
451*79a213d6SBram Moolenaarfunc Test_diffexpr()
452*79a213d6SBram Moolenaar  if !executable('diff')
453*79a213d6SBram Moolenaar    return
454*79a213d6SBram Moolenaar  endif
455*79a213d6SBram Moolenaar
456*79a213d6SBram Moolenaar  func DiffExpr()
457*79a213d6SBram Moolenaar    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>' . v:fname_out
458*79a213d6SBram Moolenaar  endfunc
459*79a213d6SBram Moolenaar  set diffexpr=DiffExpr()
460*79a213d6SBram Moolenaar  set diffopt=foldcolumn:0
461*79a213d6SBram Moolenaar
462*79a213d6SBram Moolenaar  enew!
463*79a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
464*79a213d6SBram Moolenaar  redraw
465*79a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
466*79a213d6SBram Moolenaar  diffthis
467*79a213d6SBram Moolenaar
468*79a213d6SBram Moolenaar  botright vert new
469*79a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three.'])
470*79a213d6SBram Moolenaar  diffthis
471*79a213d6SBram Moolenaar
472*79a213d6SBram Moolenaar  redraw
473*79a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
474*79a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
475*79a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
476*79a213d6SBram Moolenaar
477*79a213d6SBram Moolenaar  diffoff!
478*79a213d6SBram Moolenaar  %bwipe!
479*79a213d6SBram Moolenaar  set diffexpr& diffopt&
480*79a213d6SBram Moolenaarendfunc
481*79a213d6SBram Moolenaar
482aeb661e1SBram Moolenaarfunc Test_diffpatch()
483aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
484aeb661e1SBram Moolenaar  if !executable('patch') || !has('unix')
485aeb661e1SBram Moolenaar    return
486aeb661e1SBram Moolenaar  endif
487aeb661e1SBram Moolenaar  new
488aeb661e1SBram Moolenaar  insert
489aeb661e1SBram Moolenaar***************
490aeb661e1SBram Moolenaar*** 1,3 ****
491aeb661e1SBram Moolenaar  1
492aeb661e1SBram Moolenaar! 2
493aeb661e1SBram Moolenaar  3
494aeb661e1SBram Moolenaar--- 1,4 ----
495aeb661e1SBram Moolenaar  1
496aeb661e1SBram Moolenaar! 2x
497aeb661e1SBram Moolenaar  3
498aeb661e1SBram Moolenaar+ 4
499aeb661e1SBram Moolenaar.
500aeb661e1SBram Moolenaar  saveas Xpatch
501aeb661e1SBram Moolenaar  bwipe!
502aeb661e1SBram Moolenaar  new
503aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
5041ef73e33SBram Moolenaar
505a95ab321SBram Moolenaar  for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch']
506aeb661e1SBram Moolenaar    call setline(1, ['1', '2', '3'])
5071ef73e33SBram Moolenaar    if name != 'Xpatch'
5081ef73e33SBram Moolenaar      call rename('Xpatch', name)
5091ef73e33SBram Moolenaar    endif
5101ef73e33SBram Moolenaar    exe 'diffpatch ' . escape(name, '$')
511aeb661e1SBram Moolenaar    call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
5121ef73e33SBram Moolenaar    if name != 'Xpatch'
5131ef73e33SBram Moolenaar      call rename(name, 'Xpatch')
5141ef73e33SBram Moolenaar    endif
5151ef73e33SBram Moolenaar    bwipe!
5161ef73e33SBram Moolenaar  endfor
5171ef73e33SBram Moolenaar
518aeb661e1SBram Moolenaar  call delete('Xpatch')
519aeb661e1SBram Moolenaar  bwipe!
520aeb661e1SBram Moolenaarendfunc
521aeb661e1SBram Moolenaar
522aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
523aeb661e1SBram Moolenaar  for i in range(1, 8)
524aeb661e1SBram Moolenaar    exe "new Xtest" . i
525aeb661e1SBram Moolenaar    diffthis
526aeb661e1SBram Moolenaar  endfor
527aeb661e1SBram Moolenaar  new Xtest9
528aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
529aeb661e1SBram Moolenaar  %bwipe!
530aeb661e1SBram Moolenaarendfunc
531aeb661e1SBram Moolenaar
532aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
533aeb661e1SBram Moolenaar  new
534aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
535aeb661e1SBram Moolenaar  setl nomodifiable
536aeb661e1SBram Moolenaar  diffthis
537aeb661e1SBram Moolenaar  vnew
538aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
539aeb661e1SBram Moolenaar  diffthis
540aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
541aeb661e1SBram Moolenaar  setl nomodifiable
542aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
543aeb661e1SBram Moolenaar  %bwipe!
544aeb661e1SBram Moolenaarendfunc
545f58a8475SBram Moolenaar
546f58a8475SBram Moolenaarfunc Test_diff_lastline()
547f58a8475SBram Moolenaar  enew!
548f58a8475SBram Moolenaar  only!
549f58a8475SBram Moolenaar  call setline(1, ['This is a ', 'line with five ', 'rows'])
550f58a8475SBram Moolenaar  diffthis
551f58a8475SBram Moolenaar  botright vert new
552f58a8475SBram Moolenaar  call setline(1, ['This is', 'a line with ', 'four rows'])
553f58a8475SBram Moolenaar  diffthis
554f58a8475SBram Moolenaar  1
555f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
556f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
557f58a8475SBram Moolenaar  let w1lines = winline()
558f58a8475SBram Moolenaar  wincmd w
559f58a8475SBram Moolenaar  $
560f58a8475SBram Moolenaar  let w2lines = winline()
561f58a8475SBram Moolenaar  call assert_equal(w2lines, w1lines)
562f58a8475SBram Moolenaar  bwipe!
563f58a8475SBram Moolenaar  bwipe!
564f58a8475SBram Moolenaarendfunc
565