142093c0eSBram Moolenaar" Tests for diff mode
2*e828b762SBram Moolenaarsource shared.vim
3*e828b762SBram Moolenaarsource screendump.vim
442093c0eSBram Moolenaar
542093c0eSBram Moolenaarfunc Test_diff_fold_sync()
642093c0eSBram Moolenaar  enew!
742093c0eSBram Moolenaar  let l = range(50)
842093c0eSBram Moolenaar  call setline(1, l)
942093c0eSBram Moolenaar  diffthis
1042093c0eSBram Moolenaar  let winone = win_getid()
1142093c0eSBram Moolenaar  new
1242093c0eSBram Moolenaar  let l[25] = 'diff'
1342093c0eSBram Moolenaar  call setline(1, l)
1442093c0eSBram Moolenaar  diffthis
1542093c0eSBram Moolenaar  let wintwo = win_getid()
1642093c0eSBram Moolenaar  " line 15 is inside the closed fold
1742093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
1842093c0eSBram Moolenaar  call win_gotoid(winone)
1942093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
2042093c0eSBram Moolenaar  " open the fold
2142093c0eSBram Moolenaar  normal zv
2242093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2342093c0eSBram Moolenaar  " fold in other window must have opened too
2442093c0eSBram Moolenaar  call win_gotoid(wintwo)
2542093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2642093c0eSBram Moolenaar
2742093c0eSBram Moolenaar  " cursor position is in sync
2842093c0eSBram Moolenaar  normal 23G
2942093c0eSBram Moolenaar  call win_gotoid(winone)
3042093c0eSBram Moolenaar  call assert_equal(23, getcurpos()[1])
3142093c0eSBram Moolenaar
3242093c0eSBram Moolenaar  windo diffoff
3342093c0eSBram Moolenaar  close!
3442093c0eSBram Moolenaar  set nomodified
3542093c0eSBram Moolenaarendfunc
3642093c0eSBram Moolenaar
3742093c0eSBram Moolenaarfunc Test_vert_split()
38*e828b762SBram Moolenaar  set diffopt=filler
39*e828b762SBram Moolenaar  call Common_vert_split()
40*e828b762SBram Moolenaar  set diffopt&
41*e828b762SBram Moolenaarendfunc
42*e828b762SBram Moolenaar
43*e828b762SBram Moolenaarfunc Test_vert_split_internal()
44*e828b762SBram Moolenaar  set diffopt=internal,filler
45*e828b762SBram Moolenaar  call Common_vert_split()
46*e828b762SBram Moolenaar  set diffopt&
47*e828b762SBram Moolenaarendfunc
48*e828b762SBram Moolenaar
49*e828b762SBram Moolenaarfunc Common_vert_split()
5042093c0eSBram Moolenaar  " Disable the title to avoid xterm keeping the wrong one.
5142093c0eSBram Moolenaar  set notitle noicon
5242093c0eSBram Moolenaar  new
5342093c0eSBram Moolenaar  let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee']
5442093c0eSBram Moolenaar  call setline(1, l)
5542093c0eSBram Moolenaar  w! Xtest
5642093c0eSBram Moolenaar  normal dd
5742093c0eSBram Moolenaar  $
5842093c0eSBram Moolenaar  put
5942093c0eSBram Moolenaar  normal kkrXoxxx
6042093c0eSBram Moolenaar  w! Xtest2
6142093c0eSBram Moolenaar  file Nop
6242093c0eSBram Moolenaar  normal ggoyyyjjjozzzz
6342093c0eSBram Moolenaar  set foldmethod=marker foldcolumn=4
6442093c0eSBram Moolenaar  call assert_equal(0, &diff)
6542093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
6642093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
6742093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
6842093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
6942093c0eSBram Moolenaar  call assert_equal(1, &wrap)
7042093c0eSBram Moolenaar
7142093c0eSBram Moolenaar  vert diffsplit Xtest
7242093c0eSBram Moolenaar  vert diffsplit Xtest2
7342093c0eSBram Moolenaar  call assert_equal(1, &diff)
7442093c0eSBram Moolenaar  call assert_equal('diff', &foldmethod)
7542093c0eSBram Moolenaar  call assert_equal(2, &foldcolumn)
7642093c0eSBram Moolenaar  call assert_equal(1, &scrollbind)
7742093c0eSBram Moolenaar  call assert_equal(1, &cursorbind)
7842093c0eSBram Moolenaar  call assert_equal(0, &wrap)
7942093c0eSBram Moolenaar
8042093c0eSBram Moolenaar  let diff_fdm = &fdm
8142093c0eSBram Moolenaar  let diff_fdc = &fdc
8242093c0eSBram Moolenaar  " repeat entering diff mode here to see if this saves the wrong settings
8342093c0eSBram Moolenaar  diffthis
8442093c0eSBram Moolenaar  " jump to second window for a moment to have filler line appear at start of
8542093c0eSBram Moolenaar  " first window
8642093c0eSBram Moolenaar  wincmd w
8742093c0eSBram Moolenaar  normal gg
8842093c0eSBram Moolenaar  wincmd p
8942093c0eSBram Moolenaar  normal gg
9042093c0eSBram Moolenaar  call assert_equal(2, winline())
9142093c0eSBram Moolenaar  normal j
9242093c0eSBram Moolenaar  call assert_equal(4, winline())
9342093c0eSBram Moolenaar  normal j
9442093c0eSBram Moolenaar  call assert_equal(5, winline())
9542093c0eSBram Moolenaar  normal j
9642093c0eSBram Moolenaar  call assert_equal(6, winline())
9742093c0eSBram Moolenaar  normal j
9842093c0eSBram Moolenaar  call assert_equal(8, winline())
9942093c0eSBram Moolenaar  normal j
10042093c0eSBram Moolenaar  call assert_equal(9, winline())
10142093c0eSBram Moolenaar
10242093c0eSBram Moolenaar  wincmd w
10342093c0eSBram Moolenaar  normal gg
10442093c0eSBram Moolenaar  call assert_equal(1, winline())
10542093c0eSBram Moolenaar  normal j
10642093c0eSBram Moolenaar  call assert_equal(2, winline())
10742093c0eSBram Moolenaar  normal j
10842093c0eSBram Moolenaar  call assert_equal(4, winline())
10942093c0eSBram Moolenaar  normal j
11042093c0eSBram Moolenaar  call assert_equal(5, winline())
11142093c0eSBram Moolenaar  normal j
11242093c0eSBram Moolenaar  call assert_equal(8, winline())
11342093c0eSBram Moolenaar
11442093c0eSBram Moolenaar  wincmd w
11542093c0eSBram Moolenaar  normal gg
11642093c0eSBram Moolenaar  call assert_equal(2, winline())
11742093c0eSBram Moolenaar  normal j
11842093c0eSBram Moolenaar  call assert_equal(3, winline())
11942093c0eSBram Moolenaar  normal j
12042093c0eSBram Moolenaar  call assert_equal(4, winline())
12142093c0eSBram Moolenaar  normal j
12242093c0eSBram Moolenaar  call assert_equal(5, winline())
12342093c0eSBram Moolenaar  normal j
12442093c0eSBram Moolenaar  call assert_equal(6, winline())
12542093c0eSBram Moolenaar  normal j
12642093c0eSBram Moolenaar  call assert_equal(7, winline())
12742093c0eSBram Moolenaar  normal j
12842093c0eSBram Moolenaar  call assert_equal(8, winline())
12942093c0eSBram Moolenaar
13042093c0eSBram Moolenaar  " Test diffoff
13142093c0eSBram Moolenaar  diffoff!
13242093c0eSBram Moolenaar  1wincmd 2
13342093c0eSBram Moolenaar  let &diff = 1
13442093c0eSBram Moolenaar  let &fdm = diff_fdm
13542093c0eSBram Moolenaar  let &fdc = diff_fdc
13642093c0eSBram Moolenaar  4wincmd w
13742093c0eSBram Moolenaar  diffoff!
13842093c0eSBram Moolenaar  1wincmd w
13942093c0eSBram Moolenaar  call assert_equal(0, &diff)
14042093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
14142093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
14242093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
14342093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
14442093c0eSBram Moolenaar  call assert_equal(1, &wrap)
14542093c0eSBram Moolenaar
14642093c0eSBram Moolenaar  wincmd w
14742093c0eSBram Moolenaar  call assert_equal(0, &diff)
14842093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
14942093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
15042093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
15142093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
15242093c0eSBram Moolenaar  call assert_equal(1, &wrap)
15342093c0eSBram Moolenaar
15442093c0eSBram Moolenaar  wincmd w
15542093c0eSBram Moolenaar  call assert_equal(0, &diff)
15642093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
15742093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
15842093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
15942093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
16042093c0eSBram Moolenaar  call assert_equal(1, &wrap)
16142093c0eSBram Moolenaar
162623cf88fSBram Moolenaar  call delete('Xtest')
163623cf88fSBram Moolenaar  call delete('Xtest2')
16442093c0eSBram Moolenaar  windo bw!
16542093c0eSBram Moolenaarendfunc
16642093c0eSBram Moolenaar
16742093c0eSBram Moolenaarfunc Test_filler_lines()
16842093c0eSBram Moolenaar  " Test that diffing shows correct filler lines
16942093c0eSBram Moolenaar  enew!
17042093c0eSBram Moolenaar  put =range(4,10)
17142093c0eSBram Moolenaar  1d _
17242093c0eSBram Moolenaar  vnew
17342093c0eSBram Moolenaar  put =range(1,10)
17442093c0eSBram Moolenaar  1d _
17542093c0eSBram Moolenaar  windo diffthis
17642093c0eSBram Moolenaar  wincmd h
17742093c0eSBram Moolenaar  call assert_equal(1, line('w0'))
17842093c0eSBram Moolenaar  unlet! diff_fdm diff_fdc
17990d121faSBram Moolenaar  windo diffoff
18090d121faSBram Moolenaar  bwipe!
18190d121faSBram Moolenaar  enew!
18290d121faSBram Moolenaarendfunc
18342093c0eSBram Moolenaar
18490d121faSBram Moolenaarfunc Test_diffget_diffput()
18590d121faSBram Moolenaar  enew!
18690d121faSBram Moolenaar  let l = range(50)
18790d121faSBram Moolenaar  call setline(1, l)
18890d121faSBram Moolenaar  call assert_fails('diffget', 'E99:')
18990d121faSBram Moolenaar  diffthis
19090d121faSBram Moolenaar  call assert_fails('diffget', 'E100:')
19190d121faSBram Moolenaar  new
19290d121faSBram Moolenaar  let l[10] = 'one'
19390d121faSBram Moolenaar  let l[20] = 'two'
19490d121faSBram Moolenaar  let l[30] = 'three'
19590d121faSBram Moolenaar  let l[40] = 'four'
19690d121faSBram Moolenaar  call setline(1, l)
19790d121faSBram Moolenaar  diffthis
19890d121faSBram Moolenaar  call assert_equal('one', getline(11))
19990d121faSBram Moolenaar  11diffget
20090d121faSBram Moolenaar  call assert_equal('10', getline(11))
20190d121faSBram Moolenaar  21diffput
20290d121faSBram Moolenaar  wincmd w
20390d121faSBram Moolenaar  call assert_equal('two', getline(21))
20490d121faSBram Moolenaar  normal 31Gdo
20590d121faSBram Moolenaar  call assert_equal('three', getline(31))
20690d121faSBram Moolenaar  call assert_equal('40', getline(41))
20790d121faSBram Moolenaar  normal 41Gdp
20890d121faSBram Moolenaar  wincmd w
20990d121faSBram Moolenaar  call assert_equal('40', getline(41))
21090d121faSBram Moolenaar  new
21190d121faSBram Moolenaar  diffthis
21290d121faSBram Moolenaar  call assert_fails('diffget', 'E101:')
21390d121faSBram Moolenaar
21490d121faSBram Moolenaar  windo diffoff
21579a213d6SBram Moolenaar  %bwipe!
21679a213d6SBram Moolenaarendfunc
21779a213d6SBram Moolenaar
21879a213d6SBram Moolenaarfunc Test_dp_do_buffer()
21979a213d6SBram Moolenaar  e! one
22079a213d6SBram Moolenaar  let bn1=bufnr('%')
22179a213d6SBram Moolenaar  let l = range(60)
22279a213d6SBram Moolenaar  call setline(1, l)
22379a213d6SBram Moolenaar  diffthis
22479a213d6SBram Moolenaar
22579a213d6SBram Moolenaar  new two
22679a213d6SBram Moolenaar  let l[10] = 'one'
22779a213d6SBram Moolenaar  let l[20] = 'two'
22879a213d6SBram Moolenaar  let l[30] = 'three'
22979a213d6SBram Moolenaar  let l[40] = 'four'
23079a213d6SBram Moolenaar  let l[50] = 'five'
23179a213d6SBram Moolenaar  call setline(1, l)
23279a213d6SBram Moolenaar  diffthis
23379a213d6SBram Moolenaar
23479a213d6SBram Moolenaar  " dp and do with invalid buffer number.
23579a213d6SBram Moolenaar  11
23679a213d6SBram Moolenaar  call assert_fails('norm 99999dp', 'E102:')
23779a213d6SBram Moolenaar  call assert_fails('norm 99999do', 'E102:')
23879a213d6SBram Moolenaar  call assert_fails('diffput non_existing_buffer', 'E94:')
23979a213d6SBram Moolenaar  call assert_fails('diffget non_existing_buffer', 'E94:')
24079a213d6SBram Moolenaar
24179a213d6SBram Moolenaar  " dp and do with valid buffer number.
24279a213d6SBram Moolenaar  call assert_equal('one', getline('.'))
24379a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'do'
24479a213d6SBram Moolenaar  call assert_equal('10', getline('.'))
24579a213d6SBram Moolenaar  21
24679a213d6SBram Moolenaar  call assert_equal('two', getline('.'))
24779a213d6SBram Moolenaar  diffget one
24879a213d6SBram Moolenaar  call assert_equal('20', getline('.'))
24979a213d6SBram Moolenaar
25079a213d6SBram Moolenaar  31
25179a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'dp'
25279a213d6SBram Moolenaar  41
25379a213d6SBram Moolenaar  diffput one
25479a213d6SBram Moolenaar  wincmd w
25579a213d6SBram Moolenaar  31
25679a213d6SBram Moolenaar  call assert_equal('three', getline('.'))
25779a213d6SBram Moolenaar  41
25879a213d6SBram Moolenaar  call assert_equal('four', getline('.'))
25979a213d6SBram Moolenaar
26079a213d6SBram Moolenaar  " dp and do with buffer number which is not in diff mode.
26179a213d6SBram Moolenaar  new not_in_diff_mode
26279a213d6SBram Moolenaar  let bn3=bufnr('%')
26379a213d6SBram Moolenaar  wincmd w
26479a213d6SBram Moolenaar  51
26579a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
26679a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
26779a213d6SBram Moolenaar  call assert_fails('diffput not_in_diff_mode', 'E94:')
26879a213d6SBram Moolenaar  call assert_fails('diffget not_in_diff_mode', 'E94:')
26979a213d6SBram Moolenaar
27079a213d6SBram Moolenaar  windo diffoff
27179a213d6SBram Moolenaar  %bwipe!
27242093c0eSBram Moolenaarendfunc
273e67d546fSBram Moolenaar
274e67d546fSBram Moolenaarfunc Test_diffoff()
275e67d546fSBram Moolenaar  enew!
276e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
27779a213d6SBram Moolenaar  redraw
278e67d546fSBram Moolenaar  let normattr = screenattr(1, 1)
279e67d546fSBram Moolenaar  diffthis
280e67d546fSBram Moolenaar  botright vert new
281e67d546fSBram Moolenaar  call setline(1, ['One', '', 'Two', 'Three'])
282e67d546fSBram Moolenaar  diffthis
283e67d546fSBram Moolenaar  redraw
28425ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
285e67d546fSBram Moolenaar  diffoff!
286e67d546fSBram Moolenaar  redraw
287e67d546fSBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
288e67d546fSBram Moolenaar  bwipe!
289e67d546fSBram Moolenaar  bwipe!
290e67d546fSBram Moolenaarendfunc
291025e3e0bSBram Moolenaar
292*e828b762SBram Moolenaarfunc Common_icase_test()
293*e828b762SBram Moolenaar  edit one
294da22b8ccSBram Moolenaar  call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
29579a213d6SBram Moolenaar  redraw
29679a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
29779a213d6SBram Moolenaar  diffthis
29879a213d6SBram Moolenaar
29979a213d6SBram Moolenaar  botright vert new two
300da22b8ccSBram Moolenaar  call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE'])
30179a213d6SBram Moolenaar  diffthis
30279a213d6SBram Moolenaar
30379a213d6SBram Moolenaar  redraw
30479a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
30579a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
30679a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
30779a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
30879a213d6SBram Moolenaar
309da22b8ccSBram Moolenaar  let dtextattr = screenattr(5, 3)
310da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 1))
311da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 5))
312da22b8ccSBram Moolenaar
31379a213d6SBram Moolenaar  diffoff!
31479a213d6SBram Moolenaar  %bwipe!
315*e828b762SBram Moolenaarendfunc
316*e828b762SBram Moolenaar
317*e828b762SBram Moolenaarfunc Test_diffopt_icase()
318*e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0
319*e828b762SBram Moolenaar  call Common_icase_test()
32079a213d6SBram Moolenaar  set diffopt&
32179a213d6SBram Moolenaarendfunc
32279a213d6SBram Moolenaar
323*e828b762SBram Moolenaarfunc Test_diffopt_icase_internal()
324*e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0,internal
325*e828b762SBram Moolenaar  call Common_icase_test()
326*e828b762SBram Moolenaar  set diffopt&
327*e828b762SBram Moolenaarendfunc
32879a213d6SBram Moolenaar
329*e828b762SBram Moolenaarfunc Common_iwhite_test()
330*e828b762SBram Moolenaar  edit one
331*e828b762SBram Moolenaar  " Difference in trailing spaces and amount of spaces should be ignored,
33279a213d6SBram Moolenaar  " but not other space differences.
333*e828b762SBram Moolenaar  call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four'])
33479a213d6SBram Moolenaar  redraw
33579a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
33679a213d6SBram Moolenaar  diffthis
33779a213d6SBram Moolenaar
33879a213d6SBram Moolenaar  botright vert new two
339*e828b762SBram Moolenaar  call setline(1, ["One\t ", "Two\t ", 'Three', 'one   two', 'onetwo', ' Four'])
34079a213d6SBram Moolenaar  diffthis
34179a213d6SBram Moolenaar
34279a213d6SBram Moolenaar  redraw
34379a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
34479a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
34579a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(3, 1))
346*e828b762SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
347*e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(5, 1))
348*e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(6, 1))
34979a213d6SBram Moolenaar
35079a213d6SBram Moolenaar  diffoff!
35179a213d6SBram Moolenaar  %bwipe!
352*e828b762SBram Moolenaarendfunc
353*e828b762SBram Moolenaar
354*e828b762SBram Moolenaarfunc Test_diffopt_iwhite()
355*e828b762SBram Moolenaar  set diffopt=iwhite,foldcolumn:0
356*e828b762SBram Moolenaar  call Common_iwhite_test()
357*e828b762SBram Moolenaar  set diffopt&
358*e828b762SBram Moolenaarendfunc
359*e828b762SBram Moolenaar
360*e828b762SBram Moolenaarfunc Test_diffopt_iwhite_internal()
361*e828b762SBram Moolenaar  set diffopt=internal,iwhite,foldcolumn:0
362*e828b762SBram Moolenaar  call Common_iwhite_test()
36379a213d6SBram Moolenaar  set diffopt&
36479a213d6SBram Moolenaarendfunc
36579a213d6SBram Moolenaar
36679a213d6SBram Moolenaarfunc Test_diffopt_context()
36779a213d6SBram Moolenaar  enew!
36879a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
36979a213d6SBram Moolenaar  diffthis
37079a213d6SBram Moolenaar  new
37179a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
37279a213d6SBram Moolenaar  diffthis
37379a213d6SBram Moolenaar
37479a213d6SBram Moolenaar  set diffopt=context:2
37579a213d6SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
376*e828b762SBram Moolenaar  set diffopt=internal,context:2
377*e828b762SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
378*e828b762SBram Moolenaar
37979a213d6SBram Moolenaar  set diffopt=context:1
38079a213d6SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
381*e828b762SBram Moolenaar  set diffopt=internal,context:1
382*e828b762SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
38379a213d6SBram Moolenaar
38479a213d6SBram Moolenaar  diffoff!
38579a213d6SBram Moolenaar  %bwipe!
38679a213d6SBram Moolenaar  set diffopt&
38779a213d6SBram Moolenaarendfunc
38879a213d6SBram Moolenaar
38979a213d6SBram Moolenaarfunc Test_diffopt_horizontal()
390*e828b762SBram Moolenaar  set diffopt=internal,horizontal
39179a213d6SBram Moolenaar  diffsplit
39279a213d6SBram Moolenaar
39379a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1))
39479a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(2))
39579a213d6SBram Moolenaar  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
39679a213d6SBram Moolenaar  call assert_inrange(0, 1, winheight(1) - winheight(2))
39779a213d6SBram Moolenaar
39879a213d6SBram Moolenaar  set diffopt&
39979a213d6SBram Moolenaar  diffoff!
40079a213d6SBram Moolenaar  %bwipe
40179a213d6SBram Moolenaarendfunc
40279a213d6SBram Moolenaar
40379a213d6SBram Moolenaarfunc Test_diffopt_vertical()
404*e828b762SBram Moolenaar  set diffopt=internal,vertical
40579a213d6SBram Moolenaar  diffsplit
40679a213d6SBram Moolenaar
40779a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(1))
40879a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(2))
40979a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
41079a213d6SBram Moolenaar  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
41179a213d6SBram Moolenaar
41279a213d6SBram Moolenaar  set diffopt&
41379a213d6SBram Moolenaar  diffoff!
41479a213d6SBram Moolenaar  %bwipe
41579a213d6SBram Moolenaarendfunc
41679a213d6SBram Moolenaar
41797ce4192SBram Moolenaarfunc Test_diffopt_hiddenoff()
418*e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0,hiddenoff
41997ce4192SBram Moolenaar  e! one
42097ce4192SBram Moolenaar  call setline(1, ['Two', 'Three'])
42197ce4192SBram Moolenaar  redraw
42297ce4192SBram Moolenaar  let normattr = screenattr(1, 1)
42397ce4192SBram Moolenaar  diffthis
42497ce4192SBram Moolenaar  botright vert new two
42597ce4192SBram Moolenaar  call setline(1, ['One', 'Four'])
42697ce4192SBram Moolenaar  diffthis
42797ce4192SBram Moolenaar  redraw
42897ce4192SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
42997ce4192SBram Moolenaar  set hidden
43097ce4192SBram Moolenaar  close
43197ce4192SBram Moolenaar  redraw
43297ce4192SBram Moolenaar  " should not diffing with hidden buffer two while 'hiddenoff' is enabled
43397ce4192SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
43497ce4192SBram Moolenaar
43597ce4192SBram Moolenaar  bwipe!
43697ce4192SBram Moolenaar  bwipe!
43797ce4192SBram Moolenaar  set hidden& diffopt&
43897ce4192SBram Moolenaarendfunc
43997ce4192SBram Moolenaar
44025ea0544SBram Moolenaarfunc Test_diffoff_hidden()
441*e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0
44225ea0544SBram Moolenaar  e! one
44325ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
44479a213d6SBram Moolenaar  redraw
44525ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
44625ea0544SBram Moolenaar  diffthis
44725ea0544SBram Moolenaar  botright vert new two
44825ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
44925ea0544SBram Moolenaar  diffthis
45025ea0544SBram Moolenaar  redraw
45125ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
45225ea0544SBram Moolenaar  set hidden
45325ea0544SBram Moolenaar  close
45425ea0544SBram Moolenaar  redraw
45525ea0544SBram Moolenaar  " diffing with hidden buffer two
45625ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
45725ea0544SBram Moolenaar  diffoff
45825ea0544SBram Moolenaar  redraw
45925ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
46025ea0544SBram Moolenaar  diffthis
46125ea0544SBram Moolenaar  redraw
46225ea0544SBram Moolenaar  " still diffing with hidden buffer two
46325ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
46425ea0544SBram Moolenaar  diffoff!
46525ea0544SBram Moolenaar  redraw
46625ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
46725ea0544SBram Moolenaar  diffthis
46825ea0544SBram Moolenaar  redraw
46925ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
47025ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
47125ea0544SBram Moolenaar
47225ea0544SBram Moolenaar  bwipe!
47325ea0544SBram Moolenaar  bwipe!
47425ea0544SBram Moolenaar  set hidden& diffopt&
47525ea0544SBram Moolenaarendfunc
47625ea0544SBram Moolenaar
477025e3e0bSBram Moolenaarfunc Test_setting_cursor()
478025e3e0bSBram Moolenaar  new Xtest1
479025e3e0bSBram Moolenaar  put =range(1,90)
480025e3e0bSBram Moolenaar  wq
481025e3e0bSBram Moolenaar  new Xtest2
482025e3e0bSBram Moolenaar  put =range(1,100)
483025e3e0bSBram Moolenaar  wq
484025e3e0bSBram Moolenaar
485025e3e0bSBram Moolenaar  tabe Xtest2
486025e3e0bSBram Moolenaar  $
487025e3e0bSBram Moolenaar  diffsp Xtest1
488025e3e0bSBram Moolenaar  tabclose
489025e3e0bSBram Moolenaar
490025e3e0bSBram Moolenaar  call delete('Xtest1')
491025e3e0bSBram Moolenaar  call delete('Xtest2')
492025e3e0bSBram Moolenaarendfunc
493aeb661e1SBram Moolenaar
494aeb661e1SBram Moolenaarfunc Test_diff_move_to()
495aeb661e1SBram Moolenaar  new
496aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
497aeb661e1SBram Moolenaar  diffthis
498aeb661e1SBram Moolenaar  vnew
499aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
500aeb661e1SBram Moolenaar  diffthis
501aeb661e1SBram Moolenaar  norm ]c
502aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
503aeb661e1SBram Moolenaar  norm 3]c
504aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
505aeb661e1SBram Moolenaar  norm 10]c
506aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
507aeb661e1SBram Moolenaar  norm [c
508aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
509aeb661e1SBram Moolenaar  norm 2[c
510aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
511aeb661e1SBram Moolenaar  norm 10[c
512aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
513aeb661e1SBram Moolenaar  %bwipe!
514aeb661e1SBram Moolenaarendfunc
515aeb661e1SBram Moolenaar
51679a213d6SBram Moolenaarfunc Test_diffexpr()
51779a213d6SBram Moolenaar  if !executable('diff')
51879a213d6SBram Moolenaar    return
51979a213d6SBram Moolenaar  endif
52079a213d6SBram Moolenaar
52179a213d6SBram Moolenaar  func DiffExpr()
52279a213d6SBram Moolenaar    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>' . v:fname_out
52379a213d6SBram Moolenaar  endfunc
52479a213d6SBram Moolenaar  set diffexpr=DiffExpr()
52579a213d6SBram Moolenaar  set diffopt=foldcolumn:0
52679a213d6SBram Moolenaar
52779a213d6SBram Moolenaar  enew!
52879a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
52979a213d6SBram Moolenaar  redraw
53079a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
53179a213d6SBram Moolenaar  diffthis
53279a213d6SBram Moolenaar
53379a213d6SBram Moolenaar  botright vert new
53479a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three.'])
53579a213d6SBram Moolenaar  diffthis
53679a213d6SBram Moolenaar
53779a213d6SBram Moolenaar  redraw
53879a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
53979a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
54079a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
54179a213d6SBram Moolenaar
54279a213d6SBram Moolenaar  diffoff!
54379a213d6SBram Moolenaar  %bwipe!
54479a213d6SBram Moolenaar  set diffexpr& diffopt&
54579a213d6SBram Moolenaarendfunc
54679a213d6SBram Moolenaar
547aeb661e1SBram Moolenaarfunc Test_diffpatch()
548aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
549aeb661e1SBram Moolenaar  if !executable('patch') || !has('unix')
550aeb661e1SBram Moolenaar    return
551aeb661e1SBram Moolenaar  endif
552aeb661e1SBram Moolenaar  new
553aeb661e1SBram Moolenaar  insert
554aeb661e1SBram Moolenaar***************
555aeb661e1SBram Moolenaar*** 1,3 ****
556aeb661e1SBram Moolenaar  1
557aeb661e1SBram Moolenaar! 2
558aeb661e1SBram Moolenaar  3
559aeb661e1SBram Moolenaar--- 1,4 ----
560aeb661e1SBram Moolenaar  1
561aeb661e1SBram Moolenaar! 2x
562aeb661e1SBram Moolenaar  3
563aeb661e1SBram Moolenaar+ 4
564aeb661e1SBram Moolenaar.
56597fbc404SBram Moolenaar  saveas! Xpatch
566aeb661e1SBram Moolenaar  bwipe!
567aeb661e1SBram Moolenaar  new
568aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
5691ef73e33SBram Moolenaar
570a95ab321SBram Moolenaar  for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch']
571aeb661e1SBram Moolenaar    call setline(1, ['1', '2', '3'])
5721ef73e33SBram Moolenaar    if name != 'Xpatch'
5731ef73e33SBram Moolenaar      call rename('Xpatch', name)
5741ef73e33SBram Moolenaar    endif
5751ef73e33SBram Moolenaar    exe 'diffpatch ' . escape(name, '$')
576aeb661e1SBram Moolenaar    call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
5771ef73e33SBram Moolenaar    if name != 'Xpatch'
5781ef73e33SBram Moolenaar      call rename(name, 'Xpatch')
5791ef73e33SBram Moolenaar    endif
5801ef73e33SBram Moolenaar    bwipe!
5811ef73e33SBram Moolenaar  endfor
5821ef73e33SBram Moolenaar
583aeb661e1SBram Moolenaar  call delete('Xpatch')
584aeb661e1SBram Moolenaar  bwipe!
585aeb661e1SBram Moolenaarendfunc
586aeb661e1SBram Moolenaar
587aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
588aeb661e1SBram Moolenaar  for i in range(1, 8)
589aeb661e1SBram Moolenaar    exe "new Xtest" . i
590aeb661e1SBram Moolenaar    diffthis
591aeb661e1SBram Moolenaar  endfor
592aeb661e1SBram Moolenaar  new Xtest9
593aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
594aeb661e1SBram Moolenaar  %bwipe!
595aeb661e1SBram Moolenaarendfunc
596aeb661e1SBram Moolenaar
597aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
598aeb661e1SBram Moolenaar  new
599aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
600aeb661e1SBram Moolenaar  setl nomodifiable
601aeb661e1SBram Moolenaar  diffthis
602aeb661e1SBram Moolenaar  vnew
603aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
604aeb661e1SBram Moolenaar  diffthis
605aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
606aeb661e1SBram Moolenaar  setl nomodifiable
607aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
608aeb661e1SBram Moolenaar  %bwipe!
609aeb661e1SBram Moolenaarendfunc
610f58a8475SBram Moolenaar
61197fbc404SBram Moolenaarfunc Test_diff_hlID()
61297fbc404SBram Moolenaar  new
61397fbc404SBram Moolenaar  call setline(1, [1, 2, 3])
61497fbc404SBram Moolenaar  diffthis
61597fbc404SBram Moolenaar  vnew
61697fbc404SBram Moolenaar  call setline(1, ['1x', 2, 'x', 3])
61797fbc404SBram Moolenaar  diffthis
61897fbc404SBram Moolenaar  redraw
61997fbc404SBram Moolenaar
62097fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(-1, 1), "name"), "")
62197fbc404SBram Moolenaar
62297fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
62397fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 2), "name"), "DiffText")
62497fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
62597fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "DiffAdd")
62697fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(4, 1), "name"), "")
62797fbc404SBram Moolenaar
62897fbc404SBram Moolenaar  wincmd w
62997fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
63097fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
63197fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "")
63297fbc404SBram Moolenaar
63397fbc404SBram Moolenaar  %bwipe!
63497fbc404SBram Moolenaarendfunc
63597fbc404SBram Moolenaar
63697fbc404SBram Moolenaarfunc Test_diff_filler()
63797fbc404SBram Moolenaar  new
63897fbc404SBram Moolenaar  call setline(1, [1, 2, 3, 'x', 4])
63997fbc404SBram Moolenaar  diffthis
64097fbc404SBram Moolenaar  vnew
64197fbc404SBram Moolenaar  call setline(1, [1, 2, 'y', 'y', 3, 4])
64297fbc404SBram Moolenaar  diffthis
64397fbc404SBram Moolenaar  redraw
64497fbc404SBram Moolenaar
64597fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'diff_filler(v:val)'))
64697fbc404SBram Moolenaar  wincmd w
64797fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)'))
64897fbc404SBram Moolenaar
64997fbc404SBram Moolenaar  %bwipe!
65097fbc404SBram Moolenaarendfunc
65197fbc404SBram Moolenaar
652f58a8475SBram Moolenaarfunc Test_diff_lastline()
653f58a8475SBram Moolenaar  enew!
654f58a8475SBram Moolenaar  only!
655f58a8475SBram Moolenaar  call setline(1, ['This is a ', 'line with five ', 'rows'])
656f58a8475SBram Moolenaar  diffthis
657f58a8475SBram Moolenaar  botright vert new
658f58a8475SBram Moolenaar  call setline(1, ['This is', 'a line with ', 'four rows'])
659f58a8475SBram Moolenaar  diffthis
660f58a8475SBram Moolenaar  1
661f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
662f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
663f58a8475SBram Moolenaar  let w1lines = winline()
664f58a8475SBram Moolenaar  wincmd w
665f58a8475SBram Moolenaar  $
666f58a8475SBram Moolenaar  let w2lines = winline()
667f58a8475SBram Moolenaar  call assert_equal(w2lines, w1lines)
668f58a8475SBram Moolenaar  bwipe!
669f58a8475SBram Moolenaar  bwipe!
670f58a8475SBram Moolenaarendfunc
671*e828b762SBram Moolenaar
672*e828b762SBram Moolenaarfunc WriteDiffFiles(list1, list2)
673*e828b762SBram Moolenaar  call writefile(a:list1, 'Xfile1')
674*e828b762SBram Moolenaar  call writefile(a:list2, 'Xfile2')
675*e828b762SBram Moolenaarendfunc
676*e828b762SBram Moolenaar
677*e828b762SBram Moolenaar" Verify a screendump with both the external and external diff.
678*e828b762SBram Moolenaarfunc VerifyBoth(buf, dumpfile, extra)
679*e828b762SBram Moolenaar  call term_sendkeys(a:buf, ":diffupdate!\<cr>")
680*e828b762SBram Moolenaar  " trailing : for leaving the cursor on the command line
681*e828b762SBram Moolenaar  for cmd in [":set diffopt=filler" . a:extra . "\<cr>:", ":set diffopt+=internal\<cr>:"]
682*e828b762SBram Moolenaar    call term_sendkeys(a:buf, cmd)
683*e828b762SBram Moolenaar    if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
684*e828b762SBram Moolenaar      break " don't let the next iteration overwrite the "failed" file.
685*e828b762SBram Moolenaar    endif
686*e828b762SBram Moolenaar  endfor
687*e828b762SBram Moolenaarendfunc
688*e828b762SBram Moolenaar
689*e828b762SBram Moolenaarfunc Test_diff_screen()
690*e828b762SBram Moolenaar  if !CanRunVimInTerminal() || !has('menu')
691*e828b762SBram Moolenaar    return
692*e828b762SBram Moolenaar  endif
693*e828b762SBram Moolenaar  " clean up already existing swap files, just in case
694*e828b762SBram Moolenaar  call delete('.Xfile1.swp')
695*e828b762SBram Moolenaar  call delete('.Xfile2.swp')
696*e828b762SBram Moolenaar
697*e828b762SBram Moolenaar  " Test 1: Add a line in beginning of file 2
698*e828b762SBram Moolenaar  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
699*e828b762SBram Moolenaar  let buf = RunVimInTerminal('-d Xfile1 Xfile2', {})
700*e828b762SBram Moolenaar  " Set autoread mode, ,so that Vim won't complain once we re-write the test
701*e828b762SBram Moolenaar  " files
702*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set autoread\<cr>\<c-w>w:set autoread\<cr>\<c-w>w")
703*e828b762SBram Moolenaar
704*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_01', '')
705*e828b762SBram Moolenaar
706*e828b762SBram Moolenaar  " Test 2: Add a line in beginning of file 1
707*e828b762SBram Moolenaar  call WriteDiffFiles([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
708*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_02', '')
709*e828b762SBram Moolenaar
710*e828b762SBram Moolenaar  " Test 3: Add a line at the end of file 2
711*e828b762SBram Moolenaar  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
712*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_03', '')
713*e828b762SBram Moolenaar
714*e828b762SBram Moolenaar  " Test 4: Add a line at the end of file 1
715*e828b762SBram Moolenaar  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
716*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_04', '')
717*e828b762SBram Moolenaar
718*e828b762SBram Moolenaar  " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
719*e828b762SBram Moolenaar  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10])
720*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_05', '')
721*e828b762SBram Moolenaar
722*e828b762SBram Moolenaar  " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
723*e828b762SBram Moolenaar  call WriteDiffFiles([1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
724*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_06', '')
725*e828b762SBram Moolenaar
726*e828b762SBram Moolenaar  " Test 7 - 9: Test normal/patience/histogram diff algorithm
727*e828b762SBram Moolenaar  call WriteDiffFiles(['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
728*e828b762SBram Moolenaar      \ '    int i;', '    for(i = 0; i < 10; i++)', '    {', '        printf("Your answer is: ");',
729*e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '', 'int fact(int n)', '{', '    if(n > 1)', '    {',
730*e828b762SBram Moolenaar      \ '        return fact(n-1) * n;', '    }', '    return 1;', '}', '', 'int main(int argc, char **argv)',
731*e828b762SBram Moolenaar      \ '{', '    frobnitz(fact(10));', '}'],
732*e828b762SBram Moolenaar      \ ['#include <stdio.h>', '', 'int fib(int n)', '{', '    if(n > 2)', '    {',
733*e828b762SBram Moolenaar      \ '        return fib(n-1) + fib(n-2);', '    }', '    return 1;', '}', '', '// Frobs foo heartily',
734*e828b762SBram Moolenaar      \ 'int frobnitz(int foo)', '{', '    int i;', '    for(i = 0; i < 10; i++)', '    {',
735*e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '',
736*e828b762SBram Moolenaar      \ 'int main(int argc, char **argv)', '{', '    frobnitz(fib(10));', '}'])
737*e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
738*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
739*e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_07', {})
740*e828b762SBram Moolenaar
741*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>")
742*e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_08', {})
743*e828b762SBram Moolenaar
744*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>")
745*e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_09', {})
746*e828b762SBram Moolenaar
747*e828b762SBram Moolenaar  " Test 10-11: normal/indent-heuristic
748*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim\<cr>")
749*e828b762SBram Moolenaar  call WriteDiffFiles(['', '  def finalize(values)', '', '    values.each do |v|', '      v.finalize', '    end'],
750*e828b762SBram Moolenaar      \ ['', '  def finalize(values)', '', '    values.each do |v|', '      v.prepare', '    end', '',
751*e828b762SBram Moolenaar      \ '    values.each do |v|', '      v.finalize', '    end'])
752*e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
753*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
754*e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_10', {})
755*e828b762SBram Moolenaar
756*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>")
757*e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {})
758*e828b762SBram Moolenaar
759*e828b762SBram Moolenaar  " Test 12: diff the same file
760*e828b762SBram Moolenaar  call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
761*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_12', '')
762*e828b762SBram Moolenaar
763*e828b762SBram Moolenaar  " Test 13: diff an empty file
764*e828b762SBram Moolenaar  call WriteDiffFiles([], [])
765*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_13', '')
766*e828b762SBram Moolenaar
767*e828b762SBram Moolenaar  " Test 14: test diffopt+=icase
768*e828b762SBram Moolenaar  call WriteDiffFiles(['a', 'b', 'cd'], ['A', 'b', 'cDe'])
769*e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
770*e828b762SBram Moolenaar
771*e828b762SBram Moolenaar  " Test 15-16: test diffopt+=iwhite
772*e828b762SBram Moolenaar  call WriteDiffFiles(['int main()', '{', '   printf("Hello, World!");', '   return 0;', '}'],
773*e828b762SBram Moolenaar      \ ['int main()', '{', '   if (0)', '   {', '      printf("Hello, World!");', '      return 0;', '   }', '}'])
774*e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
775*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
776*e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_15', {})
777*e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
778*e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_16', {})
779*e828b762SBram Moolenaar
780*e828b762SBram Moolenaar  " clean up
781*e828b762SBram Moolenaar  call StopVimInTerminal(buf)
782*e828b762SBram Moolenaar  call delete('Xfile1')
783*e828b762SBram Moolenaar  call delete('Xfile2')
784*e828b762SBram Moolenaarendfunc
785*e828b762SBram Moolenaar
786