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
20179a213d6SBram Moolenaar  %bwipe!
20279a213d6SBram Moolenaarendfunc
20379a213d6SBram Moolenaar
20479a213d6SBram Moolenaarfunc Test_dp_do_buffer()
20579a213d6SBram Moolenaar  e! one
20679a213d6SBram Moolenaar  let bn1=bufnr('%')
20779a213d6SBram Moolenaar  let l = range(60)
20879a213d6SBram Moolenaar  call setline(1, l)
20979a213d6SBram Moolenaar  diffthis
21079a213d6SBram Moolenaar
21179a213d6SBram Moolenaar  new two
21279a213d6SBram Moolenaar  let l[10] = 'one'
21379a213d6SBram Moolenaar  let l[20] = 'two'
21479a213d6SBram Moolenaar  let l[30] = 'three'
21579a213d6SBram Moolenaar  let l[40] = 'four'
21679a213d6SBram Moolenaar  let l[50] = 'five'
21779a213d6SBram Moolenaar  call setline(1, l)
21879a213d6SBram Moolenaar  diffthis
21979a213d6SBram Moolenaar
22079a213d6SBram Moolenaar  " dp and do with invalid buffer number.
22179a213d6SBram Moolenaar  11
22279a213d6SBram Moolenaar  call assert_fails('norm 99999dp', 'E102:')
22379a213d6SBram Moolenaar  call assert_fails('norm 99999do', 'E102:')
22479a213d6SBram Moolenaar  call assert_fails('diffput non_existing_buffer', 'E94:')
22579a213d6SBram Moolenaar  call assert_fails('diffget non_existing_buffer', 'E94:')
22679a213d6SBram Moolenaar
22779a213d6SBram Moolenaar  " dp and do with valid buffer number.
22879a213d6SBram Moolenaar  call assert_equal('one', getline('.'))
22979a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'do'
23079a213d6SBram Moolenaar  call assert_equal('10', getline('.'))
23179a213d6SBram Moolenaar  21
23279a213d6SBram Moolenaar  call assert_equal('two', getline('.'))
23379a213d6SBram Moolenaar  diffget one
23479a213d6SBram Moolenaar  call assert_equal('20', getline('.'))
23579a213d6SBram Moolenaar
23679a213d6SBram Moolenaar  31
23779a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'dp'
23879a213d6SBram Moolenaar  41
23979a213d6SBram Moolenaar  diffput one
24079a213d6SBram Moolenaar  wincmd w
24179a213d6SBram Moolenaar  31
24279a213d6SBram Moolenaar  call assert_equal('three', getline('.'))
24379a213d6SBram Moolenaar  41
24479a213d6SBram Moolenaar  call assert_equal('four', getline('.'))
24579a213d6SBram Moolenaar
24679a213d6SBram Moolenaar  " dp and do with buffer number which is not in diff mode.
24779a213d6SBram Moolenaar  new not_in_diff_mode
24879a213d6SBram Moolenaar  let bn3=bufnr('%')
24979a213d6SBram Moolenaar  wincmd w
25079a213d6SBram Moolenaar  51
25179a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
25279a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
25379a213d6SBram Moolenaar  call assert_fails('diffput not_in_diff_mode', 'E94:')
25479a213d6SBram Moolenaar  call assert_fails('diffget not_in_diff_mode', 'E94:')
25579a213d6SBram Moolenaar
25679a213d6SBram Moolenaar  windo diffoff
25779a213d6SBram Moolenaar  %bwipe!
25842093c0eSBram Moolenaarendfunc
259e67d546fSBram Moolenaar
260e67d546fSBram Moolenaarfunc Test_diffoff()
261e67d546fSBram Moolenaar  enew!
262e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
26379a213d6SBram Moolenaar  redraw
264e67d546fSBram Moolenaar  let normattr = screenattr(1, 1)
265e67d546fSBram Moolenaar  diffthis
266e67d546fSBram Moolenaar  botright vert new
267e67d546fSBram Moolenaar  call setline(1, ['One', '', 'Two', 'Three'])
268e67d546fSBram Moolenaar  diffthis
269e67d546fSBram Moolenaar  redraw
27025ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
271e67d546fSBram Moolenaar  diffoff!
272e67d546fSBram Moolenaar  redraw
273e67d546fSBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
274e67d546fSBram Moolenaar  bwipe!
275e67d546fSBram Moolenaar  bwipe!
276e67d546fSBram Moolenaarendfunc
277025e3e0bSBram Moolenaar
27879a213d6SBram Moolenaarfunc Test_diffopt_icase()
27979a213d6SBram Moolenaar  set diffopt=icase,foldcolumn:0
28079a213d6SBram Moolenaar
28179a213d6SBram Moolenaar  e one
282da22b8ccSBram Moolenaar  call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
28379a213d6SBram Moolenaar  redraw
28479a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
28579a213d6SBram Moolenaar  diffthis
28679a213d6SBram Moolenaar
28779a213d6SBram Moolenaar  botright vert new two
288da22b8ccSBram Moolenaar  call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE'])
28979a213d6SBram Moolenaar  diffthis
29079a213d6SBram Moolenaar
29179a213d6SBram Moolenaar  redraw
29279a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
29379a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
29479a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
29579a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
29679a213d6SBram Moolenaar
297da22b8ccSBram Moolenaar  let dtextattr = screenattr(5, 3)
298da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 1))
299da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 5))
300da22b8ccSBram Moolenaar
30179a213d6SBram Moolenaar  diffoff!
30279a213d6SBram Moolenaar  %bwipe!
30379a213d6SBram Moolenaar  set diffopt&
30479a213d6SBram Moolenaarendfunc
30579a213d6SBram Moolenaar
30679a213d6SBram Moolenaarfunc Test_diffopt_iwhite()
30779a213d6SBram Moolenaar  set diffopt=iwhite,foldcolumn:0
30879a213d6SBram Moolenaar
30979a213d6SBram Moolenaar  e one
31079a213d6SBram Moolenaar  " Difference in trailing spaces should be ignored,
31179a213d6SBram Moolenaar  " but not other space differences.
31279a213d6SBram Moolenaar  call setline(1, ["One \t", 'Two', 'Three', 'Four'])
31379a213d6SBram Moolenaar  redraw
31479a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
31579a213d6SBram Moolenaar  diffthis
31679a213d6SBram Moolenaar
31779a213d6SBram Moolenaar  botright vert new two
31879a213d6SBram Moolenaar  call setline(1, ["One\t ", "Two\t ", 'Three', ' Four'])
31979a213d6SBram Moolenaar  diffthis
32079a213d6SBram Moolenaar
32179a213d6SBram Moolenaar  redraw
32279a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
32379a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
32479a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(3, 1))
32579a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(4, 1))
32679a213d6SBram Moolenaar
32779a213d6SBram Moolenaar  diffoff!
32879a213d6SBram Moolenaar  %bwipe!
32979a213d6SBram Moolenaar  set diffopt&
33079a213d6SBram Moolenaarendfunc
33179a213d6SBram Moolenaar
33279a213d6SBram Moolenaarfunc Test_diffopt_context()
33379a213d6SBram Moolenaar  enew!
33479a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
33579a213d6SBram Moolenaar  diffthis
33679a213d6SBram Moolenaar  new
33779a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
33879a213d6SBram Moolenaar  diffthis
33979a213d6SBram Moolenaar
34079a213d6SBram Moolenaar  set diffopt=context:2
34179a213d6SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
34279a213d6SBram Moolenaar  set diffopt=context:1
34379a213d6SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
34479a213d6SBram Moolenaar
34579a213d6SBram Moolenaar  diffoff!
34679a213d6SBram Moolenaar  %bwipe!
34779a213d6SBram Moolenaar  set diffopt&
34879a213d6SBram Moolenaarendfunc
34979a213d6SBram Moolenaar
35079a213d6SBram Moolenaarfunc Test_diffopt_horizontal()
35179a213d6SBram Moolenaar  set diffopt=horizontal
35279a213d6SBram Moolenaar  diffsplit
35379a213d6SBram Moolenaar
35479a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1))
35579a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(2))
35679a213d6SBram Moolenaar  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
35779a213d6SBram Moolenaar  call assert_inrange(0, 1, winheight(1) - winheight(2))
35879a213d6SBram Moolenaar
35979a213d6SBram Moolenaar  set diffopt&
36079a213d6SBram Moolenaar  diffoff!
36179a213d6SBram Moolenaar  %bwipe
36279a213d6SBram Moolenaarendfunc
36379a213d6SBram Moolenaar
36479a213d6SBram Moolenaarfunc Test_diffopt_vertical()
36579a213d6SBram Moolenaar  set diffopt=vertical
36679a213d6SBram Moolenaar  diffsplit
36779a213d6SBram Moolenaar
36879a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(1))
36979a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(2))
37079a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
37179a213d6SBram Moolenaar  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
37279a213d6SBram Moolenaar
37379a213d6SBram Moolenaar  set diffopt&
37479a213d6SBram Moolenaar  diffoff!
37579a213d6SBram Moolenaar  %bwipe
37679a213d6SBram Moolenaarendfunc
37779a213d6SBram Moolenaar
378*97ce4192SBram Moolenaarfunc Test_diffopt_hiddenoff()
379*97ce4192SBram Moolenaar  set diffopt=filler,foldcolumn:0,hiddenoff
380*97ce4192SBram Moolenaar  e! one
381*97ce4192SBram Moolenaar  call setline(1, ['Two', 'Three'])
382*97ce4192SBram Moolenaar  redraw
383*97ce4192SBram Moolenaar  let normattr = screenattr(1, 1)
384*97ce4192SBram Moolenaar  diffthis
385*97ce4192SBram Moolenaar  botright vert new two
386*97ce4192SBram Moolenaar  call setline(1, ['One', 'Four'])
387*97ce4192SBram Moolenaar  diffthis
388*97ce4192SBram Moolenaar  redraw
389*97ce4192SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
390*97ce4192SBram Moolenaar  set hidden
391*97ce4192SBram Moolenaar  close
392*97ce4192SBram Moolenaar  redraw
393*97ce4192SBram Moolenaar  " should not diffing with hidden buffer two while 'hiddenoff' is enabled
394*97ce4192SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
395*97ce4192SBram Moolenaar
396*97ce4192SBram Moolenaar  bwipe!
397*97ce4192SBram Moolenaar  bwipe!
398*97ce4192SBram Moolenaar  set hidden& diffopt&
399*97ce4192SBram Moolenaarendfunc
400*97ce4192SBram Moolenaar
40125ea0544SBram Moolenaarfunc Test_diffoff_hidden()
40225ea0544SBram Moolenaar  set diffopt=filler,foldcolumn:0
40325ea0544SBram Moolenaar  e! one
40425ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
40579a213d6SBram Moolenaar  redraw
40625ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
40725ea0544SBram Moolenaar  diffthis
40825ea0544SBram Moolenaar  botright vert new two
40925ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
41025ea0544SBram Moolenaar  diffthis
41125ea0544SBram Moolenaar  redraw
41225ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
41325ea0544SBram Moolenaar  set hidden
41425ea0544SBram Moolenaar  close
41525ea0544SBram Moolenaar  redraw
41625ea0544SBram Moolenaar  " diffing with hidden buffer two
41725ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
41825ea0544SBram Moolenaar  diffoff
41925ea0544SBram Moolenaar  redraw
42025ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
42125ea0544SBram Moolenaar  diffthis
42225ea0544SBram Moolenaar  redraw
42325ea0544SBram Moolenaar  " still diffing with hidden buffer two
42425ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
42525ea0544SBram Moolenaar  diffoff!
42625ea0544SBram Moolenaar  redraw
42725ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
42825ea0544SBram Moolenaar  diffthis
42925ea0544SBram Moolenaar  redraw
43025ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
43125ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
43225ea0544SBram Moolenaar
43325ea0544SBram Moolenaar  bwipe!
43425ea0544SBram Moolenaar  bwipe!
43525ea0544SBram Moolenaar  set hidden& diffopt&
43625ea0544SBram Moolenaarendfunc
43725ea0544SBram Moolenaar
438025e3e0bSBram Moolenaarfunc Test_setting_cursor()
439025e3e0bSBram Moolenaar  new Xtest1
440025e3e0bSBram Moolenaar  put =range(1,90)
441025e3e0bSBram Moolenaar  wq
442025e3e0bSBram Moolenaar  new Xtest2
443025e3e0bSBram Moolenaar  put =range(1,100)
444025e3e0bSBram Moolenaar  wq
445025e3e0bSBram Moolenaar
446025e3e0bSBram Moolenaar  tabe Xtest2
447025e3e0bSBram Moolenaar  $
448025e3e0bSBram Moolenaar  diffsp Xtest1
449025e3e0bSBram Moolenaar  tabclose
450025e3e0bSBram Moolenaar
451025e3e0bSBram Moolenaar  call delete('Xtest1')
452025e3e0bSBram Moolenaar  call delete('Xtest2')
453025e3e0bSBram Moolenaarendfunc
454aeb661e1SBram Moolenaar
455aeb661e1SBram Moolenaarfunc Test_diff_move_to()
456aeb661e1SBram Moolenaar  new
457aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
458aeb661e1SBram Moolenaar  diffthis
459aeb661e1SBram Moolenaar  vnew
460aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
461aeb661e1SBram Moolenaar  diffthis
462aeb661e1SBram Moolenaar  norm ]c
463aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
464aeb661e1SBram Moolenaar  norm 3]c
465aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
466aeb661e1SBram Moolenaar  norm 10]c
467aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
468aeb661e1SBram Moolenaar  norm [c
469aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
470aeb661e1SBram Moolenaar  norm 2[c
471aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
472aeb661e1SBram Moolenaar  norm 10[c
473aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
474aeb661e1SBram Moolenaar  %bwipe!
475aeb661e1SBram Moolenaarendfunc
476aeb661e1SBram Moolenaar
47779a213d6SBram Moolenaarfunc Test_diffexpr()
47879a213d6SBram Moolenaar  if !executable('diff')
47979a213d6SBram Moolenaar    return
48079a213d6SBram Moolenaar  endif
48179a213d6SBram Moolenaar
48279a213d6SBram Moolenaar  func DiffExpr()
48379a213d6SBram Moolenaar    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>' . v:fname_out
48479a213d6SBram Moolenaar  endfunc
48579a213d6SBram Moolenaar  set diffexpr=DiffExpr()
48679a213d6SBram Moolenaar  set diffopt=foldcolumn:0
48779a213d6SBram Moolenaar
48879a213d6SBram Moolenaar  enew!
48979a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
49079a213d6SBram Moolenaar  redraw
49179a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
49279a213d6SBram Moolenaar  diffthis
49379a213d6SBram Moolenaar
49479a213d6SBram Moolenaar  botright vert new
49579a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three.'])
49679a213d6SBram Moolenaar  diffthis
49779a213d6SBram Moolenaar
49879a213d6SBram Moolenaar  redraw
49979a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
50079a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
50179a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
50279a213d6SBram Moolenaar
50379a213d6SBram Moolenaar  diffoff!
50479a213d6SBram Moolenaar  %bwipe!
50579a213d6SBram Moolenaar  set diffexpr& diffopt&
50679a213d6SBram Moolenaarendfunc
50779a213d6SBram Moolenaar
508aeb661e1SBram Moolenaarfunc Test_diffpatch()
509aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
510aeb661e1SBram Moolenaar  if !executable('patch') || !has('unix')
511aeb661e1SBram Moolenaar    return
512aeb661e1SBram Moolenaar  endif
513aeb661e1SBram Moolenaar  new
514aeb661e1SBram Moolenaar  insert
515aeb661e1SBram Moolenaar***************
516aeb661e1SBram Moolenaar*** 1,3 ****
517aeb661e1SBram Moolenaar  1
518aeb661e1SBram Moolenaar! 2
519aeb661e1SBram Moolenaar  3
520aeb661e1SBram Moolenaar--- 1,4 ----
521aeb661e1SBram Moolenaar  1
522aeb661e1SBram Moolenaar! 2x
523aeb661e1SBram Moolenaar  3
524aeb661e1SBram Moolenaar+ 4
525aeb661e1SBram Moolenaar.
52697fbc404SBram Moolenaar  saveas! Xpatch
527aeb661e1SBram Moolenaar  bwipe!
528aeb661e1SBram Moolenaar  new
529aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
5301ef73e33SBram Moolenaar
531a95ab321SBram Moolenaar  for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch']
532aeb661e1SBram Moolenaar    call setline(1, ['1', '2', '3'])
5331ef73e33SBram Moolenaar    if name != 'Xpatch'
5341ef73e33SBram Moolenaar      call rename('Xpatch', name)
5351ef73e33SBram Moolenaar    endif
5361ef73e33SBram Moolenaar    exe 'diffpatch ' . escape(name, '$')
537aeb661e1SBram Moolenaar    call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
5381ef73e33SBram Moolenaar    if name != 'Xpatch'
5391ef73e33SBram Moolenaar      call rename(name, 'Xpatch')
5401ef73e33SBram Moolenaar    endif
5411ef73e33SBram Moolenaar    bwipe!
5421ef73e33SBram Moolenaar  endfor
5431ef73e33SBram Moolenaar
544aeb661e1SBram Moolenaar  call delete('Xpatch')
545aeb661e1SBram Moolenaar  bwipe!
546aeb661e1SBram Moolenaarendfunc
547aeb661e1SBram Moolenaar
548aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
549aeb661e1SBram Moolenaar  for i in range(1, 8)
550aeb661e1SBram Moolenaar    exe "new Xtest" . i
551aeb661e1SBram Moolenaar    diffthis
552aeb661e1SBram Moolenaar  endfor
553aeb661e1SBram Moolenaar  new Xtest9
554aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
555aeb661e1SBram Moolenaar  %bwipe!
556aeb661e1SBram Moolenaarendfunc
557aeb661e1SBram Moolenaar
558aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
559aeb661e1SBram Moolenaar  new
560aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
561aeb661e1SBram Moolenaar  setl nomodifiable
562aeb661e1SBram Moolenaar  diffthis
563aeb661e1SBram Moolenaar  vnew
564aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
565aeb661e1SBram Moolenaar  diffthis
566aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
567aeb661e1SBram Moolenaar  setl nomodifiable
568aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
569aeb661e1SBram Moolenaar  %bwipe!
570aeb661e1SBram Moolenaarendfunc
571f58a8475SBram Moolenaar
57297fbc404SBram Moolenaarfunc Test_diff_hlID()
57397fbc404SBram Moolenaar  new
57497fbc404SBram Moolenaar  call setline(1, [1, 2, 3])
57597fbc404SBram Moolenaar  diffthis
57697fbc404SBram Moolenaar  vnew
57797fbc404SBram Moolenaar  call setline(1, ['1x', 2, 'x', 3])
57897fbc404SBram Moolenaar  diffthis
57997fbc404SBram Moolenaar  redraw
58097fbc404SBram Moolenaar
58197fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(-1, 1), "name"), "")
58297fbc404SBram Moolenaar
58397fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
58497fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 2), "name"), "DiffText")
58597fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
58697fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "DiffAdd")
58797fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(4, 1), "name"), "")
58897fbc404SBram Moolenaar
58997fbc404SBram Moolenaar  wincmd w
59097fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
59197fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
59297fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "")
59397fbc404SBram Moolenaar
59497fbc404SBram Moolenaar  %bwipe!
59597fbc404SBram Moolenaarendfunc
59697fbc404SBram Moolenaar
59797fbc404SBram Moolenaarfunc Test_diff_filler()
59897fbc404SBram Moolenaar  new
59997fbc404SBram Moolenaar  call setline(1, [1, 2, 3, 'x', 4])
60097fbc404SBram Moolenaar  diffthis
60197fbc404SBram Moolenaar  vnew
60297fbc404SBram Moolenaar  call setline(1, [1, 2, 'y', 'y', 3, 4])
60397fbc404SBram Moolenaar  diffthis
60497fbc404SBram Moolenaar  redraw
60597fbc404SBram Moolenaar
60697fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'diff_filler(v:val)'))
60797fbc404SBram Moolenaar  wincmd w
60897fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)'))
60997fbc404SBram Moolenaar
61097fbc404SBram Moolenaar  %bwipe!
61197fbc404SBram Moolenaarendfunc
61297fbc404SBram Moolenaar
613f58a8475SBram Moolenaarfunc Test_diff_lastline()
614f58a8475SBram Moolenaar  enew!
615f58a8475SBram Moolenaar  only!
616f58a8475SBram Moolenaar  call setline(1, ['This is a ', 'line with five ', 'rows'])
617f58a8475SBram Moolenaar  diffthis
618f58a8475SBram Moolenaar  botright vert new
619f58a8475SBram Moolenaar  call setline(1, ['This is', 'a line with ', 'four rows'])
620f58a8475SBram Moolenaar  diffthis
621f58a8475SBram Moolenaar  1
622f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
623f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
624f58a8475SBram Moolenaar  let w1lines = winline()
625f58a8475SBram Moolenaar  wincmd w
626f58a8475SBram Moolenaar  $
627f58a8475SBram Moolenaar  let w2lines = winline()
628f58a8475SBram Moolenaar  call assert_equal(w2lines, w1lines)
629f58a8475SBram Moolenaar  bwipe!
630f58a8475SBram Moolenaar  bwipe!
631f58a8475SBram Moolenaarendfunc
632