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
215*25ea0544SBram 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
223*25ea0544SBram Moolenaarfunc Test_diffoff_hidden()
224*25ea0544SBram Moolenaar  set diffopt=filler,foldcolumn:0
225*25ea0544SBram Moolenaar  e! one
226*25ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
227*25ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
228*25ea0544SBram Moolenaar  diffthis
229*25ea0544SBram Moolenaar  botright vert new two
230*25ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
231*25ea0544SBram Moolenaar  diffthis
232*25ea0544SBram Moolenaar  redraw
233*25ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
234*25ea0544SBram Moolenaar  set hidden
235*25ea0544SBram Moolenaar  close
236*25ea0544SBram Moolenaar  redraw
237*25ea0544SBram Moolenaar  " diffing with hidden buffer two
238*25ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
239*25ea0544SBram Moolenaar  diffoff
240*25ea0544SBram Moolenaar  redraw
241*25ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
242*25ea0544SBram Moolenaar  diffthis
243*25ea0544SBram Moolenaar  redraw
244*25ea0544SBram Moolenaar  " still diffing with hidden buffer two
245*25ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
246*25ea0544SBram Moolenaar  diffoff!
247*25ea0544SBram Moolenaar  redraw
248*25ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
249*25ea0544SBram Moolenaar  diffthis
250*25ea0544SBram Moolenaar  redraw
251*25ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
252*25ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
253*25ea0544SBram Moolenaar
254*25ea0544SBram Moolenaar  bwipe!
255*25ea0544SBram Moolenaar  bwipe!
256*25ea0544SBram Moolenaar  set hidden& diffopt&
257*25ea0544SBram Moolenaarendfunc
258*25ea0544SBram 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