142093c0eSBram Moolenaar" Tests for diff mode
2e828b762SBram Moolenaarsource shared.vim
3e828b762SBram Moolenaarsource screendump.vim
442093c0eSBram Moolenaar
542093c0eSBram Moolenaarfunc Test_diff_fold_sync()
642093c0eSBram Moolenaar  enew!
7e8fa05b5SBram Moolenaar  let g:update_count = 0
8e8fa05b5SBram Moolenaar  au DiffUpdated * let g:update_count += 1
9e8fa05b5SBram Moolenaar
1042093c0eSBram Moolenaar  let l = range(50)
1142093c0eSBram Moolenaar  call setline(1, l)
1242093c0eSBram Moolenaar  diffthis
1342093c0eSBram Moolenaar  let winone = win_getid()
1442093c0eSBram Moolenaar  new
1542093c0eSBram Moolenaar  let l[25] = 'diff'
1642093c0eSBram Moolenaar  call setline(1, l)
1742093c0eSBram Moolenaar  diffthis
1842093c0eSBram Moolenaar  let wintwo = win_getid()
1942093c0eSBram Moolenaar  " line 15 is inside the closed fold
2042093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
2142093c0eSBram Moolenaar  call win_gotoid(winone)
2242093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
2342093c0eSBram Moolenaar  " open the fold
2442093c0eSBram Moolenaar  normal zv
2542093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2642093c0eSBram Moolenaar  " fold in other window must have opened too
2742093c0eSBram Moolenaar  call win_gotoid(wintwo)
2842093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2942093c0eSBram Moolenaar
3042093c0eSBram Moolenaar  " cursor position is in sync
3142093c0eSBram Moolenaar  normal 23G
3242093c0eSBram Moolenaar  call win_gotoid(winone)
3342093c0eSBram Moolenaar  call assert_equal(23, getcurpos()[1])
3442093c0eSBram Moolenaar
35e8fa05b5SBram Moolenaar  call assert_equal(1, g:update_count)
36e8fa05b5SBram Moolenaar  au! DiffUpdated
37e8fa05b5SBram Moolenaar
3842093c0eSBram Moolenaar  windo diffoff
3942093c0eSBram Moolenaar  close!
4042093c0eSBram Moolenaar  set nomodified
4142093c0eSBram Moolenaarendfunc
4242093c0eSBram Moolenaar
4342093c0eSBram Moolenaarfunc Test_vert_split()
44e828b762SBram Moolenaar  set diffopt=filler
45e828b762SBram Moolenaar  call Common_vert_split()
46e828b762SBram Moolenaar  set diffopt&
47e828b762SBram Moolenaarendfunc
48e828b762SBram Moolenaar
49e828b762SBram Moolenaarfunc Test_vert_split_internal()
50e828b762SBram Moolenaar  set diffopt=internal,filler
51e828b762SBram Moolenaar  call Common_vert_split()
52e828b762SBram Moolenaar  set diffopt&
53e828b762SBram Moolenaarendfunc
54e828b762SBram Moolenaar
55e828b762SBram Moolenaarfunc Common_vert_split()
5642093c0eSBram Moolenaar  " Disable the title to avoid xterm keeping the wrong one.
5742093c0eSBram Moolenaar  set notitle noicon
5842093c0eSBram Moolenaar  new
5942093c0eSBram Moolenaar  let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee']
6042093c0eSBram Moolenaar  call setline(1, l)
6142093c0eSBram Moolenaar  w! Xtest
6242093c0eSBram Moolenaar  normal dd
6342093c0eSBram Moolenaar  $
6442093c0eSBram Moolenaar  put
6542093c0eSBram Moolenaar  normal kkrXoxxx
6642093c0eSBram Moolenaar  w! Xtest2
6742093c0eSBram Moolenaar  file Nop
6842093c0eSBram Moolenaar  normal ggoyyyjjjozzzz
6942093c0eSBram Moolenaar  set foldmethod=marker foldcolumn=4
7042093c0eSBram Moolenaar  call assert_equal(0, &diff)
7142093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
7242093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
7342093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
7442093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
7542093c0eSBram Moolenaar  call assert_equal(1, &wrap)
7642093c0eSBram Moolenaar
7742093c0eSBram Moolenaar  vert diffsplit Xtest
7842093c0eSBram Moolenaar  vert diffsplit Xtest2
7942093c0eSBram Moolenaar  call assert_equal(1, &diff)
8042093c0eSBram Moolenaar  call assert_equal('diff', &foldmethod)
8142093c0eSBram Moolenaar  call assert_equal(2, &foldcolumn)
8242093c0eSBram Moolenaar  call assert_equal(1, &scrollbind)
8342093c0eSBram Moolenaar  call assert_equal(1, &cursorbind)
8442093c0eSBram Moolenaar  call assert_equal(0, &wrap)
8542093c0eSBram Moolenaar
8642093c0eSBram Moolenaar  let diff_fdm = &fdm
8742093c0eSBram Moolenaar  let diff_fdc = &fdc
8842093c0eSBram Moolenaar  " repeat entering diff mode here to see if this saves the wrong settings
8942093c0eSBram Moolenaar  diffthis
9042093c0eSBram Moolenaar  " jump to second window for a moment to have filler line appear at start of
9142093c0eSBram Moolenaar  " first window
9242093c0eSBram Moolenaar  wincmd w
9342093c0eSBram Moolenaar  normal gg
9442093c0eSBram Moolenaar  wincmd p
9542093c0eSBram Moolenaar  normal gg
9642093c0eSBram Moolenaar  call assert_equal(2, winline())
9742093c0eSBram Moolenaar  normal j
9842093c0eSBram Moolenaar  call assert_equal(4, winline())
9942093c0eSBram Moolenaar  normal j
10042093c0eSBram Moolenaar  call assert_equal(5, winline())
10142093c0eSBram Moolenaar  normal j
10242093c0eSBram Moolenaar  call assert_equal(6, winline())
10342093c0eSBram Moolenaar  normal j
10442093c0eSBram Moolenaar  call assert_equal(8, winline())
10542093c0eSBram Moolenaar  normal j
10642093c0eSBram Moolenaar  call assert_equal(9, winline())
10742093c0eSBram Moolenaar
10842093c0eSBram Moolenaar  wincmd w
10942093c0eSBram Moolenaar  normal gg
11042093c0eSBram Moolenaar  call assert_equal(1, winline())
11142093c0eSBram Moolenaar  normal j
11242093c0eSBram Moolenaar  call assert_equal(2, winline())
11342093c0eSBram Moolenaar  normal j
11442093c0eSBram Moolenaar  call assert_equal(4, winline())
11542093c0eSBram Moolenaar  normal j
11642093c0eSBram Moolenaar  call assert_equal(5, winline())
11742093c0eSBram Moolenaar  normal j
11842093c0eSBram Moolenaar  call assert_equal(8, winline())
11942093c0eSBram Moolenaar
12042093c0eSBram Moolenaar  wincmd w
12142093c0eSBram Moolenaar  normal gg
12242093c0eSBram Moolenaar  call assert_equal(2, winline())
12342093c0eSBram Moolenaar  normal j
12442093c0eSBram Moolenaar  call assert_equal(3, winline())
12542093c0eSBram Moolenaar  normal j
12642093c0eSBram Moolenaar  call assert_equal(4, winline())
12742093c0eSBram Moolenaar  normal j
12842093c0eSBram Moolenaar  call assert_equal(5, winline())
12942093c0eSBram Moolenaar  normal j
13042093c0eSBram Moolenaar  call assert_equal(6, winline())
13142093c0eSBram Moolenaar  normal j
13242093c0eSBram Moolenaar  call assert_equal(7, winline())
13342093c0eSBram Moolenaar  normal j
13442093c0eSBram Moolenaar  call assert_equal(8, winline())
13542093c0eSBram Moolenaar
13642093c0eSBram Moolenaar  " Test diffoff
13742093c0eSBram Moolenaar  diffoff!
13842093c0eSBram Moolenaar  1wincmd 2
13942093c0eSBram Moolenaar  let &diff = 1
14042093c0eSBram Moolenaar  let &fdm = diff_fdm
14142093c0eSBram Moolenaar  let &fdc = diff_fdc
14242093c0eSBram Moolenaar  4wincmd w
14342093c0eSBram Moolenaar  diffoff!
14442093c0eSBram Moolenaar  1wincmd w
14542093c0eSBram Moolenaar  call assert_equal(0, &diff)
14642093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
14742093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
14842093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
14942093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
15042093c0eSBram Moolenaar  call assert_equal(1, &wrap)
15142093c0eSBram Moolenaar
15242093c0eSBram Moolenaar  wincmd w
15342093c0eSBram Moolenaar  call assert_equal(0, &diff)
15442093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
15542093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
15642093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
15742093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
15842093c0eSBram Moolenaar  call assert_equal(1, &wrap)
15942093c0eSBram Moolenaar
16042093c0eSBram Moolenaar  wincmd w
16142093c0eSBram Moolenaar  call assert_equal(0, &diff)
16242093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
16342093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
16442093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
16542093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
16642093c0eSBram Moolenaar  call assert_equal(1, &wrap)
16742093c0eSBram Moolenaar
168623cf88fSBram Moolenaar  call delete('Xtest')
169623cf88fSBram Moolenaar  call delete('Xtest2')
17042093c0eSBram Moolenaar  windo bw!
17142093c0eSBram Moolenaarendfunc
17242093c0eSBram Moolenaar
17342093c0eSBram Moolenaarfunc Test_filler_lines()
17442093c0eSBram Moolenaar  " Test that diffing shows correct filler lines
17542093c0eSBram Moolenaar  enew!
17642093c0eSBram Moolenaar  put =range(4,10)
17742093c0eSBram Moolenaar  1d _
17842093c0eSBram Moolenaar  vnew
17942093c0eSBram Moolenaar  put =range(1,10)
18042093c0eSBram Moolenaar  1d _
18142093c0eSBram Moolenaar  windo diffthis
18242093c0eSBram Moolenaar  wincmd h
18342093c0eSBram Moolenaar  call assert_equal(1, line('w0'))
18442093c0eSBram Moolenaar  unlet! diff_fdm diff_fdc
18590d121faSBram Moolenaar  windo diffoff
18690d121faSBram Moolenaar  bwipe!
18790d121faSBram Moolenaar  enew!
18890d121faSBram Moolenaarendfunc
18942093c0eSBram Moolenaar
19090d121faSBram Moolenaarfunc Test_diffget_diffput()
19190d121faSBram Moolenaar  enew!
19290d121faSBram Moolenaar  let l = range(50)
19390d121faSBram Moolenaar  call setline(1, l)
19490d121faSBram Moolenaar  call assert_fails('diffget', 'E99:')
19590d121faSBram Moolenaar  diffthis
19690d121faSBram Moolenaar  call assert_fails('diffget', 'E100:')
19790d121faSBram Moolenaar  new
19890d121faSBram Moolenaar  let l[10] = 'one'
19990d121faSBram Moolenaar  let l[20] = 'two'
20090d121faSBram Moolenaar  let l[30] = 'three'
20190d121faSBram Moolenaar  let l[40] = 'four'
20290d121faSBram Moolenaar  call setline(1, l)
20390d121faSBram Moolenaar  diffthis
20490d121faSBram Moolenaar  call assert_equal('one', getline(11))
20590d121faSBram Moolenaar  11diffget
20690d121faSBram Moolenaar  call assert_equal('10', getline(11))
20790d121faSBram Moolenaar  21diffput
20890d121faSBram Moolenaar  wincmd w
20990d121faSBram Moolenaar  call assert_equal('two', getline(21))
21090d121faSBram Moolenaar  normal 31Gdo
21190d121faSBram Moolenaar  call assert_equal('three', getline(31))
21290d121faSBram Moolenaar  call assert_equal('40', getline(41))
21390d121faSBram Moolenaar  normal 41Gdp
21490d121faSBram Moolenaar  wincmd w
21590d121faSBram Moolenaar  call assert_equal('40', getline(41))
21690d121faSBram Moolenaar  new
21790d121faSBram Moolenaar  diffthis
21890d121faSBram Moolenaar  call assert_fails('diffget', 'E101:')
21990d121faSBram Moolenaar
22090d121faSBram Moolenaar  windo diffoff
22179a213d6SBram Moolenaar  %bwipe!
22279a213d6SBram Moolenaarendfunc
22379a213d6SBram Moolenaar
224*5f57bdcaSBram Moolenaar" Test putting two changes from one buffer to another
225*5f57bdcaSBram Moolenaarfunc Test_diffput_two()
226*5f57bdcaSBram Moolenaar  new a
227*5f57bdcaSBram Moolenaar  let win_a = win_getid()
228*5f57bdcaSBram Moolenaar  call setline(1, range(1, 10))
229*5f57bdcaSBram Moolenaar  diffthis
230*5f57bdcaSBram Moolenaar  new b
231*5f57bdcaSBram Moolenaar  let win_b = win_getid()
232*5f57bdcaSBram Moolenaar  call setline(1, range(1, 10))
233*5f57bdcaSBram Moolenaar  8del
234*5f57bdcaSBram Moolenaar  5del
235*5f57bdcaSBram Moolenaar  diffthis
236*5f57bdcaSBram Moolenaar  call win_gotoid(win_a)
237*5f57bdcaSBram Moolenaar  %diffput
238*5f57bdcaSBram Moolenaar  call win_gotoid(win_b)
239*5f57bdcaSBram Moolenaar  call assert_equal(map(range(1, 10), 'string(v:val)'), getline(1, '$'))
240*5f57bdcaSBram Moolenaar  bwipe! a
241*5f57bdcaSBram Moolenaar  bwipe! b
242*5f57bdcaSBram Moolenaarendfunc
243*5f57bdcaSBram Moolenaar
24479a213d6SBram Moolenaarfunc Test_dp_do_buffer()
24579a213d6SBram Moolenaar  e! one
24679a213d6SBram Moolenaar  let bn1=bufnr('%')
24779a213d6SBram Moolenaar  let l = range(60)
24879a213d6SBram Moolenaar  call setline(1, l)
24979a213d6SBram Moolenaar  diffthis
25079a213d6SBram Moolenaar
25179a213d6SBram Moolenaar  new two
25279a213d6SBram Moolenaar  let l[10] = 'one'
25379a213d6SBram Moolenaar  let l[20] = 'two'
25479a213d6SBram Moolenaar  let l[30] = 'three'
25579a213d6SBram Moolenaar  let l[40] = 'four'
25679a213d6SBram Moolenaar  let l[50] = 'five'
25779a213d6SBram Moolenaar  call setline(1, l)
25879a213d6SBram Moolenaar  diffthis
25979a213d6SBram Moolenaar
26079a213d6SBram Moolenaar  " dp and do with invalid buffer number.
26179a213d6SBram Moolenaar  11
26279a213d6SBram Moolenaar  call assert_fails('norm 99999dp', 'E102:')
26379a213d6SBram Moolenaar  call assert_fails('norm 99999do', 'E102:')
26479a213d6SBram Moolenaar  call assert_fails('diffput non_existing_buffer', 'E94:')
26579a213d6SBram Moolenaar  call assert_fails('diffget non_existing_buffer', 'E94:')
26679a213d6SBram Moolenaar
26779a213d6SBram Moolenaar  " dp and do with valid buffer number.
26879a213d6SBram Moolenaar  call assert_equal('one', getline('.'))
26979a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'do'
27079a213d6SBram Moolenaar  call assert_equal('10', getline('.'))
27179a213d6SBram Moolenaar  21
27279a213d6SBram Moolenaar  call assert_equal('two', getline('.'))
27379a213d6SBram Moolenaar  diffget one
27479a213d6SBram Moolenaar  call assert_equal('20', getline('.'))
27579a213d6SBram Moolenaar
27679a213d6SBram Moolenaar  31
27779a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'dp'
27879a213d6SBram Moolenaar  41
27979a213d6SBram Moolenaar  diffput one
28079a213d6SBram Moolenaar  wincmd w
28179a213d6SBram Moolenaar  31
28279a213d6SBram Moolenaar  call assert_equal('three', getline('.'))
28379a213d6SBram Moolenaar  41
28479a213d6SBram Moolenaar  call assert_equal('four', getline('.'))
28579a213d6SBram Moolenaar
28679a213d6SBram Moolenaar  " dp and do with buffer number which is not in diff mode.
28779a213d6SBram Moolenaar  new not_in_diff_mode
28879a213d6SBram Moolenaar  let bn3=bufnr('%')
28979a213d6SBram Moolenaar  wincmd w
29079a213d6SBram Moolenaar  51
29179a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
29279a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
29379a213d6SBram Moolenaar  call assert_fails('diffput not_in_diff_mode', 'E94:')
29479a213d6SBram Moolenaar  call assert_fails('diffget not_in_diff_mode', 'E94:')
29579a213d6SBram Moolenaar
29679a213d6SBram Moolenaar  windo diffoff
29779a213d6SBram Moolenaar  %bwipe!
29842093c0eSBram Moolenaarendfunc
299e67d546fSBram Moolenaar
300df77cef9SBram Moolenaarfunc Test_do_lastline()
301df77cef9SBram Moolenaar  e! one
302df77cef9SBram Moolenaar  call setline(1, ['1','2','3','4','5','6'])
303df77cef9SBram Moolenaar  diffthis
304df77cef9SBram Moolenaar
305df77cef9SBram Moolenaar  new two
306df77cef9SBram Moolenaar  call setline(1, ['2','4','5'])
307df77cef9SBram Moolenaar  diffthis
308df77cef9SBram Moolenaar
309df77cef9SBram Moolenaar  1
310df77cef9SBram Moolenaar  norm dp]c
311df77cef9SBram Moolenaar  norm dp]c
312df77cef9SBram Moolenaar  wincmd w
313df77cef9SBram Moolenaar  call assert_equal(4, line('$'))
314df77cef9SBram Moolenaar  norm G
315df77cef9SBram Moolenaar  norm do
316df77cef9SBram Moolenaar  call assert_equal(3, line('$'))
317df77cef9SBram Moolenaar
318df77cef9SBram Moolenaar  windo diffoff
319df77cef9SBram Moolenaar  %bwipe!
320df77cef9SBram Moolenaarendfunc
321df77cef9SBram Moolenaar
322e67d546fSBram Moolenaarfunc Test_diffoff()
323e67d546fSBram Moolenaar  enew!
324e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
32579a213d6SBram Moolenaar  redraw
326e67d546fSBram Moolenaar  let normattr = screenattr(1, 1)
327e67d546fSBram Moolenaar  diffthis
328e67d546fSBram Moolenaar  botright vert new
329e67d546fSBram Moolenaar  call setline(1, ['One', '', 'Two', 'Three'])
330e67d546fSBram Moolenaar  diffthis
331e67d546fSBram Moolenaar  redraw
33225ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
333e67d546fSBram Moolenaar  diffoff!
334e67d546fSBram Moolenaar  redraw
335e67d546fSBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
336e67d546fSBram Moolenaar  bwipe!
337e67d546fSBram Moolenaar  bwipe!
338e67d546fSBram Moolenaarendfunc
339025e3e0bSBram Moolenaar
340e828b762SBram Moolenaarfunc Common_icase_test()
341e828b762SBram Moolenaar  edit one
342da22b8ccSBram Moolenaar  call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
34379a213d6SBram Moolenaar  redraw
34479a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
34579a213d6SBram Moolenaar  diffthis
34679a213d6SBram Moolenaar
34779a213d6SBram Moolenaar  botright vert new two
348da22b8ccSBram Moolenaar  call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE'])
34979a213d6SBram Moolenaar  diffthis
35079a213d6SBram Moolenaar
35179a213d6SBram Moolenaar  redraw
35279a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
35379a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
35479a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
35579a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
35679a213d6SBram Moolenaar
357da22b8ccSBram Moolenaar  let dtextattr = screenattr(5, 3)
358da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 1))
359da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 5))
360da22b8ccSBram Moolenaar
36179a213d6SBram Moolenaar  diffoff!
36279a213d6SBram Moolenaar  %bwipe!
363e828b762SBram Moolenaarendfunc
364e828b762SBram Moolenaar
365e828b762SBram Moolenaarfunc Test_diffopt_icase()
366e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0
367e828b762SBram Moolenaar  call Common_icase_test()
36879a213d6SBram Moolenaar  set diffopt&
36979a213d6SBram Moolenaarendfunc
37079a213d6SBram Moolenaar
371e828b762SBram Moolenaarfunc Test_diffopt_icase_internal()
372e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0,internal
373e828b762SBram Moolenaar  call Common_icase_test()
374e828b762SBram Moolenaar  set diffopt&
375e828b762SBram Moolenaarendfunc
37679a213d6SBram Moolenaar
377e828b762SBram Moolenaarfunc Common_iwhite_test()
378e828b762SBram Moolenaar  edit one
379e828b762SBram Moolenaar  " Difference in trailing spaces and amount of spaces should be ignored,
38079a213d6SBram Moolenaar  " but not other space differences.
381e828b762SBram Moolenaar  call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four'])
38279a213d6SBram Moolenaar  redraw
38379a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
38479a213d6SBram Moolenaar  diffthis
38579a213d6SBram Moolenaar
38679a213d6SBram Moolenaar  botright vert new two
387e828b762SBram Moolenaar  call setline(1, ["One\t ", "Two\t ", 'Three', 'one   two', 'onetwo', ' Four'])
38879a213d6SBram Moolenaar  diffthis
38979a213d6SBram Moolenaar
39079a213d6SBram Moolenaar  redraw
39179a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
39279a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
39379a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(3, 1))
394e828b762SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
395e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(5, 1))
396e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(6, 1))
39779a213d6SBram Moolenaar
39879a213d6SBram Moolenaar  diffoff!
39979a213d6SBram Moolenaar  %bwipe!
400e828b762SBram Moolenaarendfunc
401e828b762SBram Moolenaar
402e828b762SBram Moolenaarfunc Test_diffopt_iwhite()
403e828b762SBram Moolenaar  set diffopt=iwhite,foldcolumn:0
404e828b762SBram Moolenaar  call Common_iwhite_test()
405e828b762SBram Moolenaar  set diffopt&
406e828b762SBram Moolenaarendfunc
407e828b762SBram Moolenaar
408e828b762SBram Moolenaarfunc Test_diffopt_iwhite_internal()
409e828b762SBram Moolenaar  set diffopt=internal,iwhite,foldcolumn:0
410e828b762SBram Moolenaar  call Common_iwhite_test()
41179a213d6SBram Moolenaar  set diffopt&
41279a213d6SBram Moolenaarendfunc
41379a213d6SBram Moolenaar
41479a213d6SBram Moolenaarfunc Test_diffopt_context()
41579a213d6SBram Moolenaar  enew!
41679a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
41779a213d6SBram Moolenaar  diffthis
41879a213d6SBram Moolenaar  new
41979a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
42079a213d6SBram Moolenaar  diffthis
42179a213d6SBram Moolenaar
42279a213d6SBram Moolenaar  set diffopt=context:2
42379a213d6SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
424e828b762SBram Moolenaar  set diffopt=internal,context:2
425e828b762SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
426e828b762SBram Moolenaar
42779a213d6SBram Moolenaar  set diffopt=context:1
42879a213d6SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
429e828b762SBram Moolenaar  set diffopt=internal,context:1
430e828b762SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
43179a213d6SBram Moolenaar
43279a213d6SBram Moolenaar  diffoff!
43379a213d6SBram Moolenaar  %bwipe!
43479a213d6SBram Moolenaar  set diffopt&
43579a213d6SBram Moolenaarendfunc
43679a213d6SBram Moolenaar
43779a213d6SBram Moolenaarfunc Test_diffopt_horizontal()
438e828b762SBram Moolenaar  set diffopt=internal,horizontal
43979a213d6SBram Moolenaar  diffsplit
44079a213d6SBram Moolenaar
44179a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1))
44279a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(2))
44379a213d6SBram Moolenaar  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
44479a213d6SBram Moolenaar  call assert_inrange(0, 1, winheight(1) - winheight(2))
44579a213d6SBram Moolenaar
44679a213d6SBram Moolenaar  set diffopt&
44779a213d6SBram Moolenaar  diffoff!
44879a213d6SBram Moolenaar  %bwipe
44979a213d6SBram Moolenaarendfunc
45079a213d6SBram Moolenaar
45179a213d6SBram Moolenaarfunc Test_diffopt_vertical()
452e828b762SBram Moolenaar  set diffopt=internal,vertical
45379a213d6SBram Moolenaar  diffsplit
45479a213d6SBram Moolenaar
45579a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(1))
45679a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(2))
45779a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
45879a213d6SBram Moolenaar  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
45979a213d6SBram Moolenaar
46079a213d6SBram Moolenaar  set diffopt&
46179a213d6SBram Moolenaar  diffoff!
46279a213d6SBram Moolenaar  %bwipe
46379a213d6SBram Moolenaarendfunc
46479a213d6SBram Moolenaar
46597ce4192SBram Moolenaarfunc Test_diffopt_hiddenoff()
466e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0,hiddenoff
46797ce4192SBram Moolenaar  e! one
46897ce4192SBram Moolenaar  call setline(1, ['Two', 'Three'])
46997ce4192SBram Moolenaar  redraw
47097ce4192SBram Moolenaar  let normattr = screenattr(1, 1)
47197ce4192SBram Moolenaar  diffthis
47297ce4192SBram Moolenaar  botright vert new two
47397ce4192SBram Moolenaar  call setline(1, ['One', 'Four'])
47497ce4192SBram Moolenaar  diffthis
47597ce4192SBram Moolenaar  redraw
47697ce4192SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
47797ce4192SBram Moolenaar  set hidden
47897ce4192SBram Moolenaar  close
47997ce4192SBram Moolenaar  redraw
48097ce4192SBram Moolenaar  " should not diffing with hidden buffer two while 'hiddenoff' is enabled
48197ce4192SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
48297ce4192SBram Moolenaar
48397ce4192SBram Moolenaar  bwipe!
48497ce4192SBram Moolenaar  bwipe!
48597ce4192SBram Moolenaar  set hidden& diffopt&
48697ce4192SBram Moolenaarendfunc
48797ce4192SBram Moolenaar
48825ea0544SBram Moolenaarfunc Test_diffoff_hidden()
489e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0
49025ea0544SBram Moolenaar  e! one
49125ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
49279a213d6SBram Moolenaar  redraw
49325ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
49425ea0544SBram Moolenaar  diffthis
49525ea0544SBram Moolenaar  botright vert new two
49625ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
49725ea0544SBram Moolenaar  diffthis
49825ea0544SBram Moolenaar  redraw
49925ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
50025ea0544SBram Moolenaar  set hidden
50125ea0544SBram Moolenaar  close
50225ea0544SBram Moolenaar  redraw
50325ea0544SBram Moolenaar  " diffing with hidden buffer two
50425ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
50525ea0544SBram Moolenaar  diffoff
50625ea0544SBram Moolenaar  redraw
50725ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
50825ea0544SBram Moolenaar  diffthis
50925ea0544SBram Moolenaar  redraw
51025ea0544SBram Moolenaar  " still diffing with hidden buffer two
51125ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
51225ea0544SBram Moolenaar  diffoff!
51325ea0544SBram Moolenaar  redraw
51425ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
51525ea0544SBram Moolenaar  diffthis
51625ea0544SBram Moolenaar  redraw
51725ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
51825ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
51925ea0544SBram Moolenaar
52025ea0544SBram Moolenaar  bwipe!
52125ea0544SBram Moolenaar  bwipe!
52225ea0544SBram Moolenaar  set hidden& diffopt&
52325ea0544SBram Moolenaarendfunc
52425ea0544SBram Moolenaar
525025e3e0bSBram Moolenaarfunc Test_setting_cursor()
526025e3e0bSBram Moolenaar  new Xtest1
527025e3e0bSBram Moolenaar  put =range(1,90)
528025e3e0bSBram Moolenaar  wq
529025e3e0bSBram Moolenaar  new Xtest2
530025e3e0bSBram Moolenaar  put =range(1,100)
531025e3e0bSBram Moolenaar  wq
532025e3e0bSBram Moolenaar
533025e3e0bSBram Moolenaar  tabe Xtest2
534025e3e0bSBram Moolenaar  $
535025e3e0bSBram Moolenaar  diffsp Xtest1
536025e3e0bSBram Moolenaar  tabclose
537025e3e0bSBram Moolenaar
538025e3e0bSBram Moolenaar  call delete('Xtest1')
539025e3e0bSBram Moolenaar  call delete('Xtest2')
540025e3e0bSBram Moolenaarendfunc
541aeb661e1SBram Moolenaar
542aeb661e1SBram Moolenaarfunc Test_diff_move_to()
543aeb661e1SBram Moolenaar  new
544aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
545aeb661e1SBram Moolenaar  diffthis
546aeb661e1SBram Moolenaar  vnew
547aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
548aeb661e1SBram Moolenaar  diffthis
549aeb661e1SBram Moolenaar  norm ]c
550aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
551aeb661e1SBram Moolenaar  norm 3]c
552aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
553aeb661e1SBram Moolenaar  norm 10]c
554aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
555aeb661e1SBram Moolenaar  norm [c
556aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
557aeb661e1SBram Moolenaar  norm 2[c
558aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
559aeb661e1SBram Moolenaar  norm 10[c
560aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
561aeb661e1SBram Moolenaar  %bwipe!
562aeb661e1SBram Moolenaarendfunc
563aeb661e1SBram Moolenaar
56479a213d6SBram Moolenaarfunc Test_diffexpr()
56579a213d6SBram Moolenaar  if !executable('diff')
56679a213d6SBram Moolenaar    return
56779a213d6SBram Moolenaar  endif
56879a213d6SBram Moolenaar
56979a213d6SBram Moolenaar  func DiffExpr()
5703b8defd0SBram Moolenaar    " Prepent some text to check diff type detection
5713b8defd0SBram Moolenaar    call writefile(['warning', '  message'], v:fname_out)
5723b8defd0SBram Moolenaar    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>>' . v:fname_out
57379a213d6SBram Moolenaar  endfunc
57479a213d6SBram Moolenaar  set diffexpr=DiffExpr()
57579a213d6SBram Moolenaar  set diffopt=foldcolumn:0
57679a213d6SBram Moolenaar
57779a213d6SBram Moolenaar  enew!
57879a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
57979a213d6SBram Moolenaar  redraw
58079a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
58179a213d6SBram Moolenaar  diffthis
58279a213d6SBram Moolenaar
58379a213d6SBram Moolenaar  botright vert new
58479a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three.'])
58579a213d6SBram Moolenaar  diffthis
58679a213d6SBram Moolenaar
58779a213d6SBram Moolenaar  redraw
58879a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
58979a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
59079a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
59179a213d6SBram Moolenaar
59279a213d6SBram Moolenaar  diffoff!
59379a213d6SBram Moolenaar  %bwipe!
59479a213d6SBram Moolenaar  set diffexpr& diffopt&
59579a213d6SBram Moolenaarendfunc
59679a213d6SBram Moolenaar
597aeb661e1SBram Moolenaarfunc Test_diffpatch()
598aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
599aeb661e1SBram Moolenaar  if !executable('patch') || !has('unix')
600aeb661e1SBram Moolenaar    return
601aeb661e1SBram Moolenaar  endif
602aeb661e1SBram Moolenaar  new
603aeb661e1SBram Moolenaar  insert
604aeb661e1SBram Moolenaar***************
605aeb661e1SBram Moolenaar*** 1,3 ****
606aeb661e1SBram Moolenaar  1
607aeb661e1SBram Moolenaar! 2
608aeb661e1SBram Moolenaar  3
609aeb661e1SBram Moolenaar--- 1,4 ----
610aeb661e1SBram Moolenaar  1
611aeb661e1SBram Moolenaar! 2x
612aeb661e1SBram Moolenaar  3
613aeb661e1SBram Moolenaar+ 4
614aeb661e1SBram Moolenaar.
61597fbc404SBram Moolenaar  saveas! Xpatch
616aeb661e1SBram Moolenaar  bwipe!
617aeb661e1SBram Moolenaar  new
618aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
6191ef73e33SBram Moolenaar
620a95ab321SBram Moolenaar  for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch']
621aeb661e1SBram Moolenaar    call setline(1, ['1', '2', '3'])
6221ef73e33SBram Moolenaar    if name != 'Xpatch'
6231ef73e33SBram Moolenaar      call rename('Xpatch', name)
6241ef73e33SBram Moolenaar    endif
6251ef73e33SBram Moolenaar    exe 'diffpatch ' . escape(name, '$')
626aeb661e1SBram Moolenaar    call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
6271ef73e33SBram Moolenaar    if name != 'Xpatch'
6281ef73e33SBram Moolenaar      call rename(name, 'Xpatch')
6291ef73e33SBram Moolenaar    endif
6301ef73e33SBram Moolenaar    bwipe!
6311ef73e33SBram Moolenaar  endfor
6321ef73e33SBram Moolenaar
633aeb661e1SBram Moolenaar  call delete('Xpatch')
634aeb661e1SBram Moolenaar  bwipe!
635aeb661e1SBram Moolenaarendfunc
636aeb661e1SBram Moolenaar
637aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
638aeb661e1SBram Moolenaar  for i in range(1, 8)
639aeb661e1SBram Moolenaar    exe "new Xtest" . i
640aeb661e1SBram Moolenaar    diffthis
641aeb661e1SBram Moolenaar  endfor
642aeb661e1SBram Moolenaar  new Xtest9
643aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
644aeb661e1SBram Moolenaar  %bwipe!
645aeb661e1SBram Moolenaarendfunc
646aeb661e1SBram Moolenaar
647aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
648aeb661e1SBram Moolenaar  new
649aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
650aeb661e1SBram Moolenaar  setl nomodifiable
651aeb661e1SBram Moolenaar  diffthis
652aeb661e1SBram Moolenaar  vnew
653aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
654aeb661e1SBram Moolenaar  diffthis
655aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
656aeb661e1SBram Moolenaar  setl nomodifiable
657aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
658aeb661e1SBram Moolenaar  %bwipe!
659aeb661e1SBram Moolenaarendfunc
660f58a8475SBram Moolenaar
66197fbc404SBram Moolenaarfunc Test_diff_hlID()
66297fbc404SBram Moolenaar  new
66397fbc404SBram Moolenaar  call setline(1, [1, 2, 3])
66497fbc404SBram Moolenaar  diffthis
66597fbc404SBram Moolenaar  vnew
66697fbc404SBram Moolenaar  call setline(1, ['1x', 2, 'x', 3])
66797fbc404SBram Moolenaar  diffthis
66897fbc404SBram Moolenaar  redraw
66997fbc404SBram Moolenaar
67097fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(-1, 1), "name"), "")
67197fbc404SBram Moolenaar
67297fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
67397fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 2), "name"), "DiffText")
67497fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
67597fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "DiffAdd")
67697fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(4, 1), "name"), "")
67797fbc404SBram Moolenaar
67897fbc404SBram Moolenaar  wincmd w
67997fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
68097fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
68197fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "")
68297fbc404SBram Moolenaar
68397fbc404SBram Moolenaar  %bwipe!
68497fbc404SBram Moolenaarendfunc
68597fbc404SBram Moolenaar
68697fbc404SBram Moolenaarfunc Test_diff_filler()
68797fbc404SBram Moolenaar  new
68897fbc404SBram Moolenaar  call setline(1, [1, 2, 3, 'x', 4])
68997fbc404SBram Moolenaar  diffthis
69097fbc404SBram Moolenaar  vnew
69197fbc404SBram Moolenaar  call setline(1, [1, 2, 'y', 'y', 3, 4])
69297fbc404SBram Moolenaar  diffthis
69397fbc404SBram Moolenaar  redraw
69497fbc404SBram Moolenaar
69597fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'diff_filler(v:val)'))
69697fbc404SBram Moolenaar  wincmd w
69797fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)'))
69897fbc404SBram Moolenaar
69997fbc404SBram Moolenaar  %bwipe!
70097fbc404SBram Moolenaarendfunc
70197fbc404SBram Moolenaar
702f58a8475SBram Moolenaarfunc Test_diff_lastline()
703f58a8475SBram Moolenaar  enew!
704f58a8475SBram Moolenaar  only!
705f58a8475SBram Moolenaar  call setline(1, ['This is a ', 'line with five ', 'rows'])
706f58a8475SBram Moolenaar  diffthis
707f58a8475SBram Moolenaar  botright vert new
708f58a8475SBram Moolenaar  call setline(1, ['This is', 'a line with ', 'four rows'])
709f58a8475SBram Moolenaar  diffthis
710f58a8475SBram Moolenaar  1
711f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
712f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
713f58a8475SBram Moolenaar  let w1lines = winline()
714f58a8475SBram Moolenaar  wincmd w
715f58a8475SBram Moolenaar  $
716f58a8475SBram Moolenaar  let w2lines = winline()
717f58a8475SBram Moolenaar  call assert_equal(w2lines, w1lines)
718f58a8475SBram Moolenaar  bwipe!
719f58a8475SBram Moolenaar  bwipe!
720f58a8475SBram Moolenaarendfunc
721e828b762SBram Moolenaar
722785fc656SBram Moolenaarfunc WriteDiffFiles(buf, list1, list2)
723e828b762SBram Moolenaar  call writefile(a:list1, 'Xfile1')
724e828b762SBram Moolenaar  call writefile(a:list2, 'Xfile2')
725785fc656SBram Moolenaar  if a:buf
726785fc656SBram Moolenaar    call term_sendkeys(a:buf, ":checktime\<CR>")
727785fc656SBram Moolenaar  endif
728e828b762SBram Moolenaarendfunc
729e828b762SBram Moolenaar
730785fc656SBram Moolenaar" Verify a screendump with both the internal and external diff.
731e828b762SBram Moolenaarfunc VerifyBoth(buf, dumpfile, extra)
732e828b762SBram Moolenaar  " trailing : for leaving the cursor on the command line
733785fc656SBram Moolenaar  for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"]
734e828b762SBram Moolenaar    call term_sendkeys(a:buf, cmd)
735e828b762SBram Moolenaar    if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
736e828b762SBram Moolenaar      break " don't let the next iteration overwrite the "failed" file.
737e828b762SBram Moolenaar    endif
738e828b762SBram Moolenaar  endfor
739e828b762SBram Moolenaarendfunc
740e828b762SBram Moolenaar
741785fc656SBram Moolenaar" Verify a screendump with the internal diff only.
742785fc656SBram Moolenaarfunc VerifyInternal(buf, dumpfile, extra)
743785fc656SBram Moolenaar  call term_sendkeys(a:buf, ":diffupdate!\<CR>")
744785fc656SBram Moolenaar  " trailing : for leaving the cursor on the command line
745785fc656SBram Moolenaar  call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:")
746785fc656SBram Moolenaar  call VerifyScreenDump(a:buf, a:dumpfile, {})
747785fc656SBram Moolenaarendfunc
748785fc656SBram Moolenaar
749e828b762SBram Moolenaarfunc Test_diff_screen()
750e828b762SBram Moolenaar  if !CanRunVimInTerminal() || !has('menu')
751e828b762SBram Moolenaar    return
752e828b762SBram Moolenaar  endif
753e828b762SBram Moolenaar  " clean up already existing swap files, just in case
754e828b762SBram Moolenaar  call delete('.Xfile1.swp')
755e828b762SBram Moolenaar  call delete('.Xfile2.swp')
756e828b762SBram Moolenaar
757e828b762SBram Moolenaar  " Test 1: Add a line in beginning of file 2
758785fc656SBram Moolenaar  call WriteDiffFiles(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
759e828b762SBram Moolenaar  let buf = RunVimInTerminal('-d Xfile1 Xfile2', {})
760e828b762SBram Moolenaar  " Set autoread mode, ,so that Vim won't complain once we re-write the test
761e828b762SBram Moolenaar  " files
762785fc656SBram Moolenaar  call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
763e828b762SBram Moolenaar
764e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_01', '')
765e828b762SBram Moolenaar
766e828b762SBram Moolenaar  " Test 2: Add a line in beginning of file 1
767785fc656SBram Moolenaar  call WriteDiffFiles(buf, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
768e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_02', '')
769e828b762SBram Moolenaar
770e828b762SBram Moolenaar  " Test 3: Add a line at the end of file 2
771785fc656SBram Moolenaar  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
772e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_03', '')
773e828b762SBram Moolenaar
774e828b762SBram Moolenaar  " Test 4: Add a line at the end of file 1
775785fc656SBram Moolenaar  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
776e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_04', '')
777e828b762SBram Moolenaar
778e828b762SBram Moolenaar  " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
779785fc656SBram Moolenaar  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10])
780e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_05', '')
781e828b762SBram Moolenaar
782e828b762SBram Moolenaar  " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
783785fc656SBram Moolenaar  call WriteDiffFiles(buf, [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
784e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_06', '')
785e828b762SBram Moolenaar
786e828b762SBram Moolenaar  " Test 7 - 9: Test normal/patience/histogram diff algorithm
787785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
788e828b762SBram Moolenaar      \ '    int i;', '    for(i = 0; i < 10; i++)', '    {', '        printf("Your answer is: ");',
789e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '', 'int fact(int n)', '{', '    if(n > 1)', '    {',
790e828b762SBram Moolenaar      \ '        return fact(n-1) * n;', '    }', '    return 1;', '}', '', 'int main(int argc, char **argv)',
791e828b762SBram Moolenaar      \ '{', '    frobnitz(fact(10));', '}'],
792e828b762SBram Moolenaar      \ ['#include <stdio.h>', '', 'int fib(int n)', '{', '    if(n > 2)', '    {',
793e828b762SBram Moolenaar      \ '        return fib(n-1) + fib(n-2);', '    }', '    return 1;', '}', '', '// Frobs foo heartily',
794e828b762SBram Moolenaar      \ 'int frobnitz(int foo)', '{', '    int i;', '    for(i = 0; i < 10; i++)', '    {',
795e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '',
796e828b762SBram Moolenaar      \ 'int main(int argc, char **argv)', '{', '    frobnitz(fib(10));', '}'])
797e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
798e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
799e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_07', {})
800e828b762SBram Moolenaar
801e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>")
802e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_08', {})
803e828b762SBram Moolenaar
804e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>")
805e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_09', {})
806e828b762SBram Moolenaar
807e828b762SBram Moolenaar  " Test 10-11: normal/indent-heuristic
808e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim\<cr>")
809785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['', '  def finalize(values)', '', '    values.each do |v|', '      v.finalize', '    end'],
810e828b762SBram Moolenaar      \ ['', '  def finalize(values)', '', '    values.each do |v|', '      v.prepare', '    end', '',
811e828b762SBram Moolenaar      \ '    values.each do |v|', '      v.finalize', '    end'])
812e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
813e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
814e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_10', {})
815e828b762SBram Moolenaar
816e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>")
817e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {})
818e828b762SBram Moolenaar
819e828b762SBram Moolenaar  " Test 12: diff the same file
820785fc656SBram Moolenaar  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
821e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_12', '')
822e828b762SBram Moolenaar
823e828b762SBram Moolenaar  " Test 13: diff an empty file
824785fc656SBram Moolenaar  call WriteDiffFiles(buf, [], [])
825e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_13', '')
826e828b762SBram Moolenaar
827e828b762SBram Moolenaar  " Test 14: test diffopt+=icase
828785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe'])
829e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
830e828b762SBram Moolenaar
831e828b762SBram Moolenaar  " Test 15-16: test diffopt+=iwhite
832785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['int main()', '{', '   printf("Hello, World!");', '   return 0;', '}'],
833e828b762SBram Moolenaar      \ ['int main()', '{', '   if (0)', '   {', '      printf("Hello, World!");', '      return 0;', '   }', '}'])
834e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
835e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
836e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_15', {})
837e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
838e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_16', {})
839e828b762SBram Moolenaar
840785fc656SBram Moolenaar  " Test 17: test diffopt+=iblank
841785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy'])
842785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank")
843785fc656SBram Moolenaar
844785fc656SBram Moolenaar  " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol
845785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite")
846785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall")
847785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol")
848785fc656SBram Moolenaar
849785fc656SBram Moolenaar  " Test 19: test diffopt+=iwhiteeol
850785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx  xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar'])
851785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol")
852785fc656SBram Moolenaar
853785fc656SBram Moolenaar  " Test 19: test diffopt+=iwhiteall
854785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall")
855785fc656SBram Moolenaar
856e828b762SBram Moolenaar  " clean up
857e828b762SBram Moolenaar  call StopVimInTerminal(buf)
858e828b762SBram Moolenaar  call delete('Xfile1')
859e828b762SBram Moolenaar  call delete('Xfile2')
860e828b762SBram Moolenaarendfunc
861e828b762SBram Moolenaar
8624a5abbd6SBram Moolenaarfunc Test_diff_with_cursorline()
8634a5abbd6SBram Moolenaar  if !CanRunVimInTerminal()
8644a5abbd6SBram Moolenaar    return
8654a5abbd6SBram Moolenaar  endif
8664a5abbd6SBram Moolenaar
8674a5abbd6SBram Moolenaar  call writefile([
8684a5abbd6SBram Moolenaar	\ 'hi CursorLine ctermbg=red ctermfg=white',
8694a5abbd6SBram Moolenaar	\ 'set cursorline',
8704a5abbd6SBram Moolenaar	\ 'call setline(1, ["foo","foo","foo","bar"])',
8714a5abbd6SBram Moolenaar	\ 'vnew',
8724a5abbd6SBram Moolenaar	\ 'call setline(1, ["bee","foo","foo","baz"])',
8734a5abbd6SBram Moolenaar	\ 'windo diffthis',
8744a5abbd6SBram Moolenaar	\ '2wincmd w',
8754a5abbd6SBram Moolenaar	\ ], 'Xtest_diff_cursorline')
8764a5abbd6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {})
8774a5abbd6SBram Moolenaar
8784a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {})
8794a5abbd6SBram Moolenaar  call term_sendkeys(buf, "j")
8804a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {})
8814a5abbd6SBram Moolenaar  call term_sendkeys(buf, "j")
8824a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {})
8834a5abbd6SBram Moolenaar
8844a5abbd6SBram Moolenaar  " clean up
8854a5abbd6SBram Moolenaar  call StopVimInTerminal(buf)
8864a5abbd6SBram Moolenaar  call delete('Xtest_diff_cursorline')
8874a5abbd6SBram Moolenaarendfunc
888