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
20279a213d6SBram Moolenaar  %bwipe!
20379a213d6SBram Moolenaarendfunc
20479a213d6SBram Moolenaar
20579a213d6SBram Moolenaarfunc Test_dp_do_buffer()
20679a213d6SBram Moolenaar  e! one
20779a213d6SBram Moolenaar  let bn1=bufnr('%')
20879a213d6SBram Moolenaar  let l = range(60)
20979a213d6SBram Moolenaar  call setline(1, l)
21079a213d6SBram Moolenaar  diffthis
21179a213d6SBram Moolenaar
21279a213d6SBram Moolenaar  new two
21379a213d6SBram Moolenaar  let l[10] = 'one'
21479a213d6SBram Moolenaar  let l[20] = 'two'
21579a213d6SBram Moolenaar  let l[30] = 'three'
21679a213d6SBram Moolenaar  let l[40] = 'four'
21779a213d6SBram Moolenaar  let l[50] = 'five'
21879a213d6SBram Moolenaar  call setline(1, l)
21979a213d6SBram Moolenaar  diffthis
22079a213d6SBram Moolenaar
22179a213d6SBram Moolenaar  " dp and do with invalid buffer number.
22279a213d6SBram Moolenaar  11
22379a213d6SBram Moolenaar  call assert_fails('norm 99999dp', 'E102:')
22479a213d6SBram Moolenaar  call assert_fails('norm 99999do', 'E102:')
22579a213d6SBram Moolenaar  call assert_fails('diffput non_existing_buffer', 'E94:')
22679a213d6SBram Moolenaar  call assert_fails('diffget non_existing_buffer', 'E94:')
22779a213d6SBram Moolenaar
22879a213d6SBram Moolenaar  " dp and do with valid buffer number.
22979a213d6SBram Moolenaar  call assert_equal('one', getline('.'))
23079a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'do'
23179a213d6SBram Moolenaar  call assert_equal('10', getline('.'))
23279a213d6SBram Moolenaar  21
23379a213d6SBram Moolenaar  call assert_equal('two', getline('.'))
23479a213d6SBram Moolenaar  diffget one
23579a213d6SBram Moolenaar  call assert_equal('20', getline('.'))
23679a213d6SBram Moolenaar
23779a213d6SBram Moolenaar  31
23879a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'dp'
23979a213d6SBram Moolenaar  41
24079a213d6SBram Moolenaar  diffput one
24179a213d6SBram Moolenaar  wincmd w
24279a213d6SBram Moolenaar  31
24379a213d6SBram Moolenaar  call assert_equal('three', getline('.'))
24479a213d6SBram Moolenaar  41
24579a213d6SBram Moolenaar  call assert_equal('four', getline('.'))
24679a213d6SBram Moolenaar
24779a213d6SBram Moolenaar  " dp and do with buffer number which is not in diff mode.
24879a213d6SBram Moolenaar  new not_in_diff_mode
24979a213d6SBram Moolenaar  let bn3=bufnr('%')
25079a213d6SBram Moolenaar  wincmd w
25179a213d6SBram Moolenaar  51
25279a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
25379a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
25479a213d6SBram Moolenaar  call assert_fails('diffput not_in_diff_mode', 'E94:')
25579a213d6SBram Moolenaar  call assert_fails('diffget not_in_diff_mode', 'E94:')
25679a213d6SBram Moolenaar
25779a213d6SBram Moolenaar  windo diffoff
25879a213d6SBram Moolenaar  %bwipe!
25942093c0eSBram Moolenaarendfunc
260e67d546fSBram Moolenaar
261e67d546fSBram Moolenaarfunc Test_diffoff()
262e67d546fSBram Moolenaar  enew!
263e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
26479a213d6SBram 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
27979a213d6SBram Moolenaarfunc Test_diffopt_icase()
28079a213d6SBram Moolenaar  set diffopt=icase,foldcolumn:0
28179a213d6SBram Moolenaar
28279a213d6SBram Moolenaar  e one
283da22b8ccSBram Moolenaar  call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
28479a213d6SBram Moolenaar  redraw
28579a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
28679a213d6SBram Moolenaar  diffthis
28779a213d6SBram Moolenaar
28879a213d6SBram Moolenaar  botright vert new two
289da22b8ccSBram Moolenaar  call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE'])
29079a213d6SBram Moolenaar  diffthis
29179a213d6SBram Moolenaar
29279a213d6SBram Moolenaar  redraw
29379a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
29479a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
29579a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
29679a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
29779a213d6SBram Moolenaar
298da22b8ccSBram Moolenaar  let dtextattr = screenattr(5, 3)
299da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 1))
300da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 5))
301da22b8ccSBram Moolenaar
30279a213d6SBram Moolenaar  diffoff!
30379a213d6SBram Moolenaar  %bwipe!
30479a213d6SBram Moolenaar  set diffopt&
30579a213d6SBram Moolenaarendfunc
30679a213d6SBram Moolenaar
30779a213d6SBram Moolenaarfunc Test_diffopt_iwhite()
30879a213d6SBram Moolenaar  set diffopt=iwhite,foldcolumn:0
30979a213d6SBram Moolenaar
31079a213d6SBram Moolenaar  e one
31179a213d6SBram Moolenaar  " Difference in trailing spaces should be ignored,
31279a213d6SBram Moolenaar  " but not other space differences.
31379a213d6SBram Moolenaar  call setline(1, ["One \t", 'Two', 'Three', 'Four'])
31479a213d6SBram Moolenaar  redraw
31579a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
31679a213d6SBram Moolenaar  diffthis
31779a213d6SBram Moolenaar
31879a213d6SBram Moolenaar  botright vert new two
31979a213d6SBram Moolenaar  call setline(1, ["One\t ", "Two\t ", 'Three', ' Four'])
32079a213d6SBram Moolenaar  diffthis
32179a213d6SBram Moolenaar
32279a213d6SBram Moolenaar  redraw
32379a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
32479a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
32579a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(3, 1))
32679a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(4, 1))
32779a213d6SBram Moolenaar
32879a213d6SBram Moolenaar  diffoff!
32979a213d6SBram Moolenaar  %bwipe!
33079a213d6SBram Moolenaar  set diffopt&
33179a213d6SBram Moolenaarendfunc
33279a213d6SBram Moolenaar
33379a213d6SBram Moolenaarfunc Test_diffopt_context()
33479a213d6SBram Moolenaar  enew!
33579a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
33679a213d6SBram Moolenaar  diffthis
33779a213d6SBram Moolenaar  new
33879a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
33979a213d6SBram Moolenaar  diffthis
34079a213d6SBram Moolenaar
34179a213d6SBram Moolenaar  set diffopt=context:2
34279a213d6SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
34379a213d6SBram Moolenaar  set diffopt=context:1
34479a213d6SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
34579a213d6SBram Moolenaar
34679a213d6SBram Moolenaar  diffoff!
34779a213d6SBram Moolenaar  %bwipe!
34879a213d6SBram Moolenaar  set diffopt&
34979a213d6SBram Moolenaarendfunc
35079a213d6SBram Moolenaar
35179a213d6SBram Moolenaarfunc Test_diffopt_horizontal()
35279a213d6SBram Moolenaar  set diffopt=horizontal
35379a213d6SBram Moolenaar  diffsplit
35479a213d6SBram Moolenaar
35579a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1))
35679a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(2))
35779a213d6SBram Moolenaar  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
35879a213d6SBram Moolenaar  call assert_inrange(0, 1, winheight(1) - winheight(2))
35979a213d6SBram Moolenaar
36079a213d6SBram Moolenaar  set diffopt&
36179a213d6SBram Moolenaar  diffoff!
36279a213d6SBram Moolenaar  %bwipe
36379a213d6SBram Moolenaarendfunc
36479a213d6SBram Moolenaar
36579a213d6SBram Moolenaarfunc Test_diffopt_vertical()
36679a213d6SBram Moolenaar  set diffopt=vertical
36779a213d6SBram Moolenaar  diffsplit
36879a213d6SBram Moolenaar
36979a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(1))
37079a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(2))
37179a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
37279a213d6SBram Moolenaar  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
37379a213d6SBram Moolenaar
37479a213d6SBram Moolenaar  set diffopt&
37579a213d6SBram Moolenaar  diffoff!
37679a213d6SBram Moolenaar  %bwipe
37779a213d6SBram Moolenaarendfunc
37879a213d6SBram Moolenaar
37925ea0544SBram Moolenaarfunc Test_diffoff_hidden()
38025ea0544SBram Moolenaar  set diffopt=filler,foldcolumn:0
38125ea0544SBram Moolenaar  e! one
38225ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
38379a213d6SBram Moolenaar  redraw
38425ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
38525ea0544SBram Moolenaar  diffthis
38625ea0544SBram Moolenaar  botright vert new two
38725ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
38825ea0544SBram Moolenaar  diffthis
38925ea0544SBram Moolenaar  redraw
39025ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
39125ea0544SBram Moolenaar  set hidden
39225ea0544SBram Moolenaar  close
39325ea0544SBram Moolenaar  redraw
39425ea0544SBram Moolenaar  " diffing with hidden buffer two
39525ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
39625ea0544SBram Moolenaar  diffoff
39725ea0544SBram Moolenaar  redraw
39825ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
39925ea0544SBram Moolenaar  diffthis
40025ea0544SBram Moolenaar  redraw
40125ea0544SBram Moolenaar  " still diffing with hidden buffer two
40225ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
40325ea0544SBram Moolenaar  diffoff!
40425ea0544SBram Moolenaar  redraw
40525ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
40625ea0544SBram Moolenaar  diffthis
40725ea0544SBram Moolenaar  redraw
40825ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
40925ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
41025ea0544SBram Moolenaar
41125ea0544SBram Moolenaar  bwipe!
41225ea0544SBram Moolenaar  bwipe!
41325ea0544SBram Moolenaar  set hidden& diffopt&
41425ea0544SBram Moolenaarendfunc
41525ea0544SBram Moolenaar
416025e3e0bSBram Moolenaarfunc Test_setting_cursor()
417025e3e0bSBram Moolenaar  new Xtest1
418025e3e0bSBram Moolenaar  put =range(1,90)
419025e3e0bSBram Moolenaar  wq
420025e3e0bSBram Moolenaar  new Xtest2
421025e3e0bSBram Moolenaar  put =range(1,100)
422025e3e0bSBram Moolenaar  wq
423025e3e0bSBram Moolenaar
424025e3e0bSBram Moolenaar  tabe Xtest2
425025e3e0bSBram Moolenaar  $
426025e3e0bSBram Moolenaar  diffsp Xtest1
427025e3e0bSBram Moolenaar  tabclose
428025e3e0bSBram Moolenaar
429025e3e0bSBram Moolenaar  call delete('Xtest1')
430025e3e0bSBram Moolenaar  call delete('Xtest2')
431025e3e0bSBram Moolenaarendfunc
432aeb661e1SBram Moolenaar
433aeb661e1SBram Moolenaarfunc Test_diff_move_to()
434aeb661e1SBram Moolenaar  new
435aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
436aeb661e1SBram Moolenaar  diffthis
437aeb661e1SBram Moolenaar  vnew
438aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
439aeb661e1SBram Moolenaar  diffthis
440aeb661e1SBram Moolenaar  norm ]c
441aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
442aeb661e1SBram Moolenaar  norm 3]c
443aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
444aeb661e1SBram Moolenaar  norm 10]c
445aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
446aeb661e1SBram Moolenaar  norm [c
447aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
448aeb661e1SBram Moolenaar  norm 2[c
449aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
450aeb661e1SBram Moolenaar  norm 10[c
451aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
452aeb661e1SBram Moolenaar  %bwipe!
453aeb661e1SBram Moolenaarendfunc
454aeb661e1SBram Moolenaar
45579a213d6SBram Moolenaarfunc Test_diffexpr()
45679a213d6SBram Moolenaar  if !executable('diff')
45779a213d6SBram Moolenaar    return
45879a213d6SBram Moolenaar  endif
45979a213d6SBram Moolenaar
46079a213d6SBram Moolenaar  func DiffExpr()
46179a213d6SBram Moolenaar    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>' . v:fname_out
46279a213d6SBram Moolenaar  endfunc
46379a213d6SBram Moolenaar  set diffexpr=DiffExpr()
46479a213d6SBram Moolenaar  set diffopt=foldcolumn:0
46579a213d6SBram Moolenaar
46679a213d6SBram Moolenaar  enew!
46779a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
46879a213d6SBram Moolenaar  redraw
46979a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
47079a213d6SBram Moolenaar  diffthis
47179a213d6SBram Moolenaar
47279a213d6SBram Moolenaar  botright vert new
47379a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three.'])
47479a213d6SBram Moolenaar  diffthis
47579a213d6SBram Moolenaar
47679a213d6SBram Moolenaar  redraw
47779a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
47879a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
47979a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
48079a213d6SBram Moolenaar
48179a213d6SBram Moolenaar  diffoff!
48279a213d6SBram Moolenaar  %bwipe!
48379a213d6SBram Moolenaar  set diffexpr& diffopt&
48479a213d6SBram Moolenaarendfunc
48579a213d6SBram Moolenaar
486aeb661e1SBram Moolenaarfunc Test_diffpatch()
487aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
488aeb661e1SBram Moolenaar  if !executable('patch') || !has('unix')
489aeb661e1SBram Moolenaar    return
490aeb661e1SBram Moolenaar  endif
491aeb661e1SBram Moolenaar  new
492aeb661e1SBram Moolenaar  insert
493aeb661e1SBram Moolenaar***************
494aeb661e1SBram Moolenaar*** 1,3 ****
495aeb661e1SBram Moolenaar  1
496aeb661e1SBram Moolenaar! 2
497aeb661e1SBram Moolenaar  3
498aeb661e1SBram Moolenaar--- 1,4 ----
499aeb661e1SBram Moolenaar  1
500aeb661e1SBram Moolenaar! 2x
501aeb661e1SBram Moolenaar  3
502aeb661e1SBram Moolenaar+ 4
503aeb661e1SBram Moolenaar.
504*97fbc404SBram Moolenaar  saveas! Xpatch
505aeb661e1SBram Moolenaar  bwipe!
506aeb661e1SBram Moolenaar  new
507aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
5081ef73e33SBram Moolenaar
509a95ab321SBram Moolenaar  for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch']
510aeb661e1SBram Moolenaar    call setline(1, ['1', '2', '3'])
5111ef73e33SBram Moolenaar    if name != 'Xpatch'
5121ef73e33SBram Moolenaar      call rename('Xpatch', name)
5131ef73e33SBram Moolenaar    endif
5141ef73e33SBram Moolenaar    exe 'diffpatch ' . escape(name, '$')
515aeb661e1SBram Moolenaar    call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
5161ef73e33SBram Moolenaar    if name != 'Xpatch'
5171ef73e33SBram Moolenaar      call rename(name, 'Xpatch')
5181ef73e33SBram Moolenaar    endif
5191ef73e33SBram Moolenaar    bwipe!
5201ef73e33SBram Moolenaar  endfor
5211ef73e33SBram Moolenaar
522aeb661e1SBram Moolenaar  call delete('Xpatch')
523aeb661e1SBram Moolenaar  bwipe!
524aeb661e1SBram Moolenaarendfunc
525aeb661e1SBram Moolenaar
526aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
527aeb661e1SBram Moolenaar  for i in range(1, 8)
528aeb661e1SBram Moolenaar    exe "new Xtest" . i
529aeb661e1SBram Moolenaar    diffthis
530aeb661e1SBram Moolenaar  endfor
531aeb661e1SBram Moolenaar  new Xtest9
532aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
533aeb661e1SBram Moolenaar  %bwipe!
534aeb661e1SBram Moolenaarendfunc
535aeb661e1SBram Moolenaar
536aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
537aeb661e1SBram Moolenaar  new
538aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
539aeb661e1SBram Moolenaar  setl nomodifiable
540aeb661e1SBram Moolenaar  diffthis
541aeb661e1SBram Moolenaar  vnew
542aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
543aeb661e1SBram Moolenaar  diffthis
544aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
545aeb661e1SBram Moolenaar  setl nomodifiable
546aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
547aeb661e1SBram Moolenaar  %bwipe!
548aeb661e1SBram Moolenaarendfunc
549f58a8475SBram Moolenaar
550*97fbc404SBram Moolenaarfunc Test_diff_hlID()
551*97fbc404SBram Moolenaar  new
552*97fbc404SBram Moolenaar  call setline(1, [1, 2, 3])
553*97fbc404SBram Moolenaar  diffthis
554*97fbc404SBram Moolenaar  vnew
555*97fbc404SBram Moolenaar  call setline(1, ['1x', 2, 'x', 3])
556*97fbc404SBram Moolenaar  diffthis
557*97fbc404SBram Moolenaar  redraw
558*97fbc404SBram Moolenaar
559*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(-1, 1), "name"), "")
560*97fbc404SBram Moolenaar
561*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
562*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 2), "name"), "DiffText")
563*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
564*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "DiffAdd")
565*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(4, 1), "name"), "")
566*97fbc404SBram Moolenaar
567*97fbc404SBram Moolenaar  wincmd w
568*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
569*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
570*97fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "")
571*97fbc404SBram Moolenaar
572*97fbc404SBram Moolenaar  %bwipe!
573*97fbc404SBram Moolenaarendfunc
574*97fbc404SBram Moolenaar
575*97fbc404SBram Moolenaarfunc Test_diff_filler()
576*97fbc404SBram Moolenaar  new
577*97fbc404SBram Moolenaar  call setline(1, [1, 2, 3, 'x', 4])
578*97fbc404SBram Moolenaar  diffthis
579*97fbc404SBram Moolenaar  vnew
580*97fbc404SBram Moolenaar  call setline(1, [1, 2, 'y', 'y', 3, 4])
581*97fbc404SBram Moolenaar  diffthis
582*97fbc404SBram Moolenaar  redraw
583*97fbc404SBram Moolenaar
584*97fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'diff_filler(v:val)'))
585*97fbc404SBram Moolenaar  wincmd w
586*97fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)'))
587*97fbc404SBram Moolenaar
588*97fbc404SBram Moolenaar  %bwipe!
589*97fbc404SBram Moolenaarendfunc
590*97fbc404SBram Moolenaar
591f58a8475SBram Moolenaarfunc Test_diff_lastline()
592f58a8475SBram Moolenaar  enew!
593f58a8475SBram Moolenaar  only!
594f58a8475SBram Moolenaar  call setline(1, ['This is a ', 'line with five ', 'rows'])
595f58a8475SBram Moolenaar  diffthis
596f58a8475SBram Moolenaar  botright vert new
597f58a8475SBram Moolenaar  call setline(1, ['This is', 'a line with ', 'four rows'])
598f58a8475SBram Moolenaar  diffthis
599f58a8475SBram Moolenaar  1
600f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
601f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
602f58a8475SBram Moolenaar  let w1lines = winline()
603f58a8475SBram Moolenaar  wincmd w
604f58a8475SBram Moolenaar  $
605f58a8475SBram Moolenaar  let w2lines = winline()
606f58a8475SBram Moolenaar  call assert_equal(w2lines, w1lines)
607f58a8475SBram Moolenaar  bwipe!
608f58a8475SBram Moolenaar  bwipe!
609f58a8475SBram Moolenaarendfunc
610