142093c0eSBram Moolenaar" Tests for diff mode
26d91bcb4SBram Moolenaar
3e828b762SBram Moolenaarsource shared.vim
4e828b762SBram Moolenaarsource screendump.vim
53c8ee629SBram Moolenaarsource check.vim
642093c0eSBram Moolenaar
742093c0eSBram Moolenaarfunc Test_diff_fold_sync()
842093c0eSBram Moolenaar  enew!
9e8fa05b5SBram Moolenaar  let g:update_count = 0
10e8fa05b5SBram Moolenaar  au DiffUpdated * let g:update_count += 1
11e8fa05b5SBram Moolenaar
1242093c0eSBram Moolenaar  let l = range(50)
1342093c0eSBram Moolenaar  call setline(1, l)
1442093c0eSBram Moolenaar  diffthis
1542093c0eSBram Moolenaar  let winone = win_getid()
1642093c0eSBram Moolenaar  new
1742093c0eSBram Moolenaar  let l[25] = 'diff'
1842093c0eSBram Moolenaar  call setline(1, l)
1942093c0eSBram Moolenaar  diffthis
2042093c0eSBram Moolenaar  let wintwo = win_getid()
2142093c0eSBram Moolenaar  " line 15 is inside the closed fold
2242093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
2342093c0eSBram Moolenaar  call win_gotoid(winone)
2442093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
2542093c0eSBram Moolenaar  " open the fold
2642093c0eSBram Moolenaar  normal zv
2742093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2842093c0eSBram Moolenaar  " fold in other window must have opened too
2942093c0eSBram Moolenaar  call win_gotoid(wintwo)
3042093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
3142093c0eSBram Moolenaar
3242093c0eSBram Moolenaar  " cursor position is in sync
3342093c0eSBram Moolenaar  normal 23G
3442093c0eSBram Moolenaar  call win_gotoid(winone)
3542093c0eSBram Moolenaar  call assert_equal(23, getcurpos()[1])
3642093c0eSBram Moolenaar
37e8fa05b5SBram Moolenaar  call assert_equal(1, g:update_count)
38e8fa05b5SBram Moolenaar  au! DiffUpdated
39e8fa05b5SBram Moolenaar
4042093c0eSBram Moolenaar  windo diffoff
4142093c0eSBram Moolenaar  close!
4242093c0eSBram Moolenaar  set nomodified
4342093c0eSBram Moolenaarendfunc
4442093c0eSBram Moolenaar
4542093c0eSBram Moolenaarfunc Test_vert_split()
46e828b762SBram Moolenaar  set diffopt=filler
47e828b762SBram Moolenaar  call Common_vert_split()
48e828b762SBram Moolenaar  set diffopt&
49e828b762SBram Moolenaarendfunc
50e828b762SBram Moolenaar
51e828b762SBram Moolenaarfunc Test_vert_split_internal()
52e828b762SBram Moolenaar  set diffopt=internal,filler
53e828b762SBram Moolenaar  call Common_vert_split()
54e828b762SBram Moolenaar  set diffopt&
55e828b762SBram Moolenaarendfunc
56e828b762SBram Moolenaar
57e828b762SBram Moolenaarfunc Common_vert_split()
5842093c0eSBram Moolenaar  " Disable the title to avoid xterm keeping the wrong one.
5942093c0eSBram Moolenaar  set notitle noicon
6042093c0eSBram Moolenaar  new
6142093c0eSBram Moolenaar  let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee']
6242093c0eSBram Moolenaar  call setline(1, l)
6342093c0eSBram Moolenaar  w! Xtest
6442093c0eSBram Moolenaar  normal dd
6542093c0eSBram Moolenaar  $
6642093c0eSBram Moolenaar  put
6742093c0eSBram Moolenaar  normal kkrXoxxx
6842093c0eSBram Moolenaar  w! Xtest2
6942093c0eSBram Moolenaar  file Nop
7042093c0eSBram Moolenaar  normal ggoyyyjjjozzzz
7142093c0eSBram Moolenaar  set foldmethod=marker foldcolumn=4
7242093c0eSBram Moolenaar  call assert_equal(0, &diff)
7342093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
7442093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
7542093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
7642093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
7742093c0eSBram Moolenaar  call assert_equal(1, &wrap)
7842093c0eSBram Moolenaar
7942093c0eSBram Moolenaar  vert diffsplit Xtest
8042093c0eSBram Moolenaar  vert diffsplit Xtest2
8142093c0eSBram Moolenaar  call assert_equal(1, &diff)
8242093c0eSBram Moolenaar  call assert_equal('diff', &foldmethod)
8342093c0eSBram Moolenaar  call assert_equal(2, &foldcolumn)
8442093c0eSBram Moolenaar  call assert_equal(1, &scrollbind)
8542093c0eSBram Moolenaar  call assert_equal(1, &cursorbind)
8642093c0eSBram Moolenaar  call assert_equal(0, &wrap)
8742093c0eSBram Moolenaar
8842093c0eSBram Moolenaar  let diff_fdm = &fdm
8942093c0eSBram Moolenaar  let diff_fdc = &fdc
9042093c0eSBram Moolenaar  " repeat entering diff mode here to see if this saves the wrong settings
9142093c0eSBram Moolenaar  diffthis
9242093c0eSBram Moolenaar  " jump to second window for a moment to have filler line appear at start of
9342093c0eSBram Moolenaar  " first window
9442093c0eSBram Moolenaar  wincmd w
9542093c0eSBram Moolenaar  normal gg
9642093c0eSBram Moolenaar  wincmd p
9742093c0eSBram Moolenaar  normal gg
9842093c0eSBram Moolenaar  call assert_equal(2, winline())
9942093c0eSBram Moolenaar  normal j
10042093c0eSBram Moolenaar  call assert_equal(4, winline())
10142093c0eSBram Moolenaar  normal j
10242093c0eSBram Moolenaar  call assert_equal(5, winline())
10342093c0eSBram Moolenaar  normal j
10442093c0eSBram Moolenaar  call assert_equal(6, winline())
10542093c0eSBram Moolenaar  normal j
10642093c0eSBram Moolenaar  call assert_equal(8, winline())
10742093c0eSBram Moolenaar  normal j
10842093c0eSBram Moolenaar  call assert_equal(9, winline())
10942093c0eSBram Moolenaar
11042093c0eSBram Moolenaar  wincmd w
11142093c0eSBram Moolenaar  normal gg
11242093c0eSBram Moolenaar  call assert_equal(1, winline())
11342093c0eSBram Moolenaar  normal j
11442093c0eSBram Moolenaar  call assert_equal(2, winline())
11542093c0eSBram Moolenaar  normal j
11642093c0eSBram Moolenaar  call assert_equal(4, winline())
11742093c0eSBram Moolenaar  normal j
11842093c0eSBram Moolenaar  call assert_equal(5, winline())
11942093c0eSBram Moolenaar  normal j
12042093c0eSBram Moolenaar  call assert_equal(8, winline())
12142093c0eSBram Moolenaar
12242093c0eSBram Moolenaar  wincmd w
12342093c0eSBram Moolenaar  normal gg
12442093c0eSBram Moolenaar  call assert_equal(2, winline())
12542093c0eSBram Moolenaar  normal j
12642093c0eSBram Moolenaar  call assert_equal(3, winline())
12742093c0eSBram Moolenaar  normal j
12842093c0eSBram Moolenaar  call assert_equal(4, winline())
12942093c0eSBram Moolenaar  normal j
13042093c0eSBram Moolenaar  call assert_equal(5, winline())
13142093c0eSBram Moolenaar  normal j
13242093c0eSBram Moolenaar  call assert_equal(6, winline())
13342093c0eSBram Moolenaar  normal j
13442093c0eSBram Moolenaar  call assert_equal(7, winline())
13542093c0eSBram Moolenaar  normal j
13642093c0eSBram Moolenaar  call assert_equal(8, winline())
13742093c0eSBram Moolenaar
13842093c0eSBram Moolenaar  " Test diffoff
13942093c0eSBram Moolenaar  diffoff!
14042093c0eSBram Moolenaar  1wincmd 2
14142093c0eSBram Moolenaar  let &diff = 1
14242093c0eSBram Moolenaar  let &fdm = diff_fdm
14342093c0eSBram Moolenaar  let &fdc = diff_fdc
14442093c0eSBram Moolenaar  4wincmd w
14542093c0eSBram Moolenaar  diffoff!
14642093c0eSBram Moolenaar  1wincmd 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
16242093c0eSBram Moolenaar  wincmd w
16342093c0eSBram Moolenaar  call assert_equal(0, &diff)
16442093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
16542093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
16642093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
16742093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
16842093c0eSBram Moolenaar  call assert_equal(1, &wrap)
16942093c0eSBram Moolenaar
170623cf88fSBram Moolenaar  call delete('Xtest')
171623cf88fSBram Moolenaar  call delete('Xtest2')
17242093c0eSBram Moolenaar  windo bw!
17342093c0eSBram Moolenaarendfunc
17442093c0eSBram Moolenaar
17542093c0eSBram Moolenaarfunc Test_filler_lines()
17642093c0eSBram Moolenaar  " Test that diffing shows correct filler lines
17742093c0eSBram Moolenaar  enew!
17842093c0eSBram Moolenaar  put =range(4,10)
17942093c0eSBram Moolenaar  1d _
18042093c0eSBram Moolenaar  vnew
18142093c0eSBram Moolenaar  put =range(1,10)
18242093c0eSBram Moolenaar  1d _
18342093c0eSBram Moolenaar  windo diffthis
18442093c0eSBram Moolenaar  wincmd h
18542093c0eSBram Moolenaar  call assert_equal(1, line('w0'))
18642093c0eSBram Moolenaar  unlet! diff_fdm diff_fdc
18790d121faSBram Moolenaar  windo diffoff
18890d121faSBram Moolenaar  bwipe!
18990d121faSBram Moolenaar  enew!
19090d121faSBram Moolenaarendfunc
19142093c0eSBram Moolenaar
19290d121faSBram Moolenaarfunc Test_diffget_diffput()
19390d121faSBram Moolenaar  enew!
19490d121faSBram Moolenaar  let l = range(50)
19590d121faSBram Moolenaar  call setline(1, l)
19690d121faSBram Moolenaar  call assert_fails('diffget', 'E99:')
19790d121faSBram Moolenaar  diffthis
19890d121faSBram Moolenaar  call assert_fails('diffget', 'E100:')
19990d121faSBram Moolenaar  new
20090d121faSBram Moolenaar  let l[10] = 'one'
20190d121faSBram Moolenaar  let l[20] = 'two'
20290d121faSBram Moolenaar  let l[30] = 'three'
20390d121faSBram Moolenaar  let l[40] = 'four'
20490d121faSBram Moolenaar  call setline(1, l)
20590d121faSBram Moolenaar  diffthis
20690d121faSBram Moolenaar  call assert_equal('one', getline(11))
20790d121faSBram Moolenaar  11diffget
20890d121faSBram Moolenaar  call assert_equal('10', getline(11))
20990d121faSBram Moolenaar  21diffput
21090d121faSBram Moolenaar  wincmd w
21190d121faSBram Moolenaar  call assert_equal('two', getline(21))
21290d121faSBram Moolenaar  normal 31Gdo
21390d121faSBram Moolenaar  call assert_equal('three', getline(31))
21490d121faSBram Moolenaar  call assert_equal('40', getline(41))
21590d121faSBram Moolenaar  normal 41Gdp
21690d121faSBram Moolenaar  wincmd w
21790d121faSBram Moolenaar  call assert_equal('40', getline(41))
21890d121faSBram Moolenaar  new
21990d121faSBram Moolenaar  diffthis
22090d121faSBram Moolenaar  call assert_fails('diffget', 'E101:')
22190d121faSBram Moolenaar
22290d121faSBram Moolenaar  windo diffoff
22379a213d6SBram Moolenaar  %bwipe!
22479a213d6SBram Moolenaarendfunc
22579a213d6SBram Moolenaar
2265f57bdcaSBram Moolenaar" Test putting two changes from one buffer to another
2275f57bdcaSBram Moolenaarfunc Test_diffput_two()
2285f57bdcaSBram Moolenaar  new a
2295f57bdcaSBram Moolenaar  let win_a = win_getid()
2305f57bdcaSBram Moolenaar  call setline(1, range(1, 10))
2315f57bdcaSBram Moolenaar  diffthis
2325f57bdcaSBram Moolenaar  new b
2335f57bdcaSBram Moolenaar  let win_b = win_getid()
2345f57bdcaSBram Moolenaar  call setline(1, range(1, 10))
2355f57bdcaSBram Moolenaar  8del
2365f57bdcaSBram Moolenaar  5del
2375f57bdcaSBram Moolenaar  diffthis
2385f57bdcaSBram Moolenaar  call win_gotoid(win_a)
2395f57bdcaSBram Moolenaar  %diffput
2405f57bdcaSBram Moolenaar  call win_gotoid(win_b)
2415f57bdcaSBram Moolenaar  call assert_equal(map(range(1, 10), 'string(v:val)'), getline(1, '$'))
2425f57bdcaSBram Moolenaar  bwipe! a
2435f57bdcaSBram Moolenaar  bwipe! b
2445f57bdcaSBram Moolenaarendfunc
2455f57bdcaSBram Moolenaar
246ae7dba89SBram Moolenaar" :diffput and :diffget completes names of buffers which
247ae7dba89SBram Moolenaar" are in diff mode and which are different then current buffer.
248efcc3290SBram Moolenaar" No completion when the current window is not in diff mode.
249efcc3290SBram Moolenaarfunc Test_diffget_diffput_completion()
250efcc3290SBram Moolenaar  e            Xdiff1 | diffthis
251efcc3290SBram Moolenaar  botright new Xdiff2
252efcc3290SBram Moolenaar  botright new Xdiff3 | split | diffthis
253efcc3290SBram Moolenaar  botright new Xdiff4 | diffthis
254ae7dba89SBram Moolenaar
255efcc3290SBram Moolenaar  wincmd t
256efcc3290SBram Moolenaar  call assert_equal('Xdiff1', bufname('%'))
257ae7dba89SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
258efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff3 Xdiff4', @:)
259ae7dba89SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
260efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff3 Xdiff4', @:)
261efcc3290SBram Moolenaar  call assert_equal(['Xdiff3', 'Xdiff4'], getcompletion('', 'diff_buffer'))
262ae7dba89SBram Moolenaar
263efcc3290SBram Moolenaar  " Xdiff2 is not in diff mode, so no completion for :diffput, :diffget
264efcc3290SBram Moolenaar  wincmd j
265efcc3290SBram Moolenaar  call assert_equal('Xdiff2', bufname('%'))
266ae7dba89SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
267ae7dba89SBram Moolenaar  call assert_equal('"diffput ', @:)
268ae7dba89SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
269ae7dba89SBram Moolenaar  call assert_equal('"diffget ', @:)
270ae7dba89SBram Moolenaar  call assert_equal([], getcompletion('', 'diff_buffer'))
271ae7dba89SBram Moolenaar
272efcc3290SBram Moolenaar  " Xdiff3 is split in 2 windows, only the top one is in diff mode.
273efcc3290SBram Moolenaar  " So completion of :diffput :diffget only happens in the top window.
274efcc3290SBram Moolenaar  wincmd j
275efcc3290SBram Moolenaar  call assert_equal('Xdiff3', bufname('%'))
276efcc3290SBram Moolenaar  call assert_equal(1, &diff)
277efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
278efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff1 Xdiff4', @:)
279efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
280efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff1 Xdiff4', @:)
281efcc3290SBram Moolenaar  call assert_equal(['Xdiff1', 'Xdiff4'], getcompletion('', 'diff_buffer'))
282efcc3290SBram Moolenaar
283efcc3290SBram Moolenaar  wincmd j
284efcc3290SBram Moolenaar  call assert_equal('Xdiff3', bufname('%'))
285efcc3290SBram Moolenaar  call assert_equal(0, &diff)
286efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
287efcc3290SBram Moolenaar  call assert_equal('"diffput ', @:)
288efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
289efcc3290SBram Moolenaar  call assert_equal('"diffget ', @:)
290efcc3290SBram Moolenaar  call assert_equal([], getcompletion('', 'diff_buffer'))
291efcc3290SBram Moolenaar
292efcc3290SBram Moolenaar  wincmd j
293efcc3290SBram Moolenaar  call assert_equal('Xdiff4', bufname('%'))
294efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
295efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff1 Xdiff3', @:)
296efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
297efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff1 Xdiff3', @:)
298efcc3290SBram Moolenaar  call assert_equal(['Xdiff1', 'Xdiff3'], getcompletion('', 'diff_buffer'))
299efcc3290SBram Moolenaar
300ae7dba89SBram Moolenaar  %bwipe
301ae7dba89SBram Moolenaarendfunc
302ae7dba89SBram Moolenaar
30379a213d6SBram Moolenaarfunc Test_dp_do_buffer()
30479a213d6SBram Moolenaar  e! one
30579a213d6SBram Moolenaar  let bn1=bufnr('%')
30679a213d6SBram Moolenaar  let l = range(60)
30779a213d6SBram Moolenaar  call setline(1, l)
30879a213d6SBram Moolenaar  diffthis
30979a213d6SBram Moolenaar
31079a213d6SBram Moolenaar  new two
31179a213d6SBram Moolenaar  let l[10] = 'one'
31279a213d6SBram Moolenaar  let l[20] = 'two'
31379a213d6SBram Moolenaar  let l[30] = 'three'
31479a213d6SBram Moolenaar  let l[40] = 'four'
31579a213d6SBram Moolenaar  let l[50] = 'five'
31679a213d6SBram Moolenaar  call setline(1, l)
31779a213d6SBram Moolenaar  diffthis
31879a213d6SBram Moolenaar
31979a213d6SBram Moolenaar  " dp and do with invalid buffer number.
32079a213d6SBram Moolenaar  11
32179a213d6SBram Moolenaar  call assert_fails('norm 99999dp', 'E102:')
32279a213d6SBram Moolenaar  call assert_fails('norm 99999do', 'E102:')
32379a213d6SBram Moolenaar  call assert_fails('diffput non_existing_buffer', 'E94:')
32479a213d6SBram Moolenaar  call assert_fails('diffget non_existing_buffer', 'E94:')
32579a213d6SBram Moolenaar
32679a213d6SBram Moolenaar  " dp and do with valid buffer number.
32779a213d6SBram Moolenaar  call assert_equal('one', getline('.'))
32879a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'do'
32979a213d6SBram Moolenaar  call assert_equal('10', getline('.'))
33079a213d6SBram Moolenaar  21
33179a213d6SBram Moolenaar  call assert_equal('two', getline('.'))
33279a213d6SBram Moolenaar  diffget one
33379a213d6SBram Moolenaar  call assert_equal('20', getline('.'))
33479a213d6SBram Moolenaar
33579a213d6SBram Moolenaar  31
33679a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'dp'
33779a213d6SBram Moolenaar  41
33879a213d6SBram Moolenaar  diffput one
33979a213d6SBram Moolenaar  wincmd w
34079a213d6SBram Moolenaar  31
34179a213d6SBram Moolenaar  call assert_equal('three', getline('.'))
34279a213d6SBram Moolenaar  41
34379a213d6SBram Moolenaar  call assert_equal('four', getline('.'))
34479a213d6SBram Moolenaar
34579a213d6SBram Moolenaar  " dp and do with buffer number which is not in diff mode.
34679a213d6SBram Moolenaar  new not_in_diff_mode
34779a213d6SBram Moolenaar  let bn3=bufnr('%')
34879a213d6SBram Moolenaar  wincmd w
34979a213d6SBram Moolenaar  51
35079a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
35179a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
35279a213d6SBram Moolenaar  call assert_fails('diffput not_in_diff_mode', 'E94:')
35379a213d6SBram Moolenaar  call assert_fails('diffget not_in_diff_mode', 'E94:')
35479a213d6SBram Moolenaar
35579a213d6SBram Moolenaar  windo diffoff
35679a213d6SBram Moolenaar  %bwipe!
35742093c0eSBram Moolenaarendfunc
358e67d546fSBram Moolenaar
359df77cef9SBram Moolenaarfunc Test_do_lastline()
360df77cef9SBram Moolenaar  e! one
361df77cef9SBram Moolenaar  call setline(1, ['1','2','3','4','5','6'])
362df77cef9SBram Moolenaar  diffthis
363df77cef9SBram Moolenaar
364df77cef9SBram Moolenaar  new two
365df77cef9SBram Moolenaar  call setline(1, ['2','4','5'])
366df77cef9SBram Moolenaar  diffthis
367df77cef9SBram Moolenaar
368df77cef9SBram Moolenaar  1
369df77cef9SBram Moolenaar  norm dp]c
370df77cef9SBram Moolenaar  norm dp]c
371df77cef9SBram Moolenaar  wincmd w
372df77cef9SBram Moolenaar  call assert_equal(4, line('$'))
373df77cef9SBram Moolenaar  norm G
374df77cef9SBram Moolenaar  norm do
375df77cef9SBram Moolenaar  call assert_equal(3, line('$'))
376df77cef9SBram Moolenaar
377df77cef9SBram Moolenaar  windo diffoff
378df77cef9SBram Moolenaar  %bwipe!
379df77cef9SBram Moolenaarendfunc
380df77cef9SBram Moolenaar
381e67d546fSBram Moolenaarfunc Test_diffoff()
382e67d546fSBram Moolenaar  enew!
383e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
38479a213d6SBram Moolenaar  redraw
385e67d546fSBram Moolenaar  let normattr = screenattr(1, 1)
386e67d546fSBram Moolenaar  diffthis
387e67d546fSBram Moolenaar  botright vert new
388e67d546fSBram Moolenaar  call setline(1, ['One', '', 'Two', 'Three'])
389e67d546fSBram Moolenaar  diffthis
390e67d546fSBram Moolenaar  redraw
391196b4664SBram Moolenaar  call assert_notequal(normattr, 1->screenattr(1))
392e67d546fSBram Moolenaar  diffoff!
393e67d546fSBram Moolenaar  redraw
394e67d546fSBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
395e67d546fSBram Moolenaar  bwipe!
396e67d546fSBram Moolenaar  bwipe!
397e67d546fSBram Moolenaarendfunc
398025e3e0bSBram Moolenaar
399e828b762SBram Moolenaarfunc Common_icase_test()
400e828b762SBram Moolenaar  edit one
401da22b8ccSBram Moolenaar  call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
40279a213d6SBram Moolenaar  redraw
40379a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
40479a213d6SBram Moolenaar  diffthis
40579a213d6SBram Moolenaar
40679a213d6SBram Moolenaar  botright vert new two
407da22b8ccSBram Moolenaar  call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE'])
40879a213d6SBram Moolenaar  diffthis
40979a213d6SBram Moolenaar
41079a213d6SBram Moolenaar  redraw
41179a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
41279a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
41379a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
41479a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
41579a213d6SBram Moolenaar
416da22b8ccSBram Moolenaar  let dtextattr = screenattr(5, 3)
417da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 1))
418da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 5))
419da22b8ccSBram Moolenaar
42079a213d6SBram Moolenaar  diffoff!
42179a213d6SBram Moolenaar  %bwipe!
422e828b762SBram Moolenaarendfunc
423e828b762SBram Moolenaar
424e828b762SBram Moolenaarfunc Test_diffopt_icase()
425e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0
426e828b762SBram Moolenaar  call Common_icase_test()
42779a213d6SBram Moolenaar  set diffopt&
42879a213d6SBram Moolenaarendfunc
42979a213d6SBram Moolenaar
430e828b762SBram Moolenaarfunc Test_diffopt_icase_internal()
431e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0,internal
432e828b762SBram Moolenaar  call Common_icase_test()
433e828b762SBram Moolenaar  set diffopt&
434e828b762SBram Moolenaarendfunc
43579a213d6SBram Moolenaar
436e828b762SBram Moolenaarfunc Common_iwhite_test()
437e828b762SBram Moolenaar  edit one
438e828b762SBram Moolenaar  " Difference in trailing spaces and amount of spaces should be ignored,
43979a213d6SBram Moolenaar  " but not other space differences.
440e828b762SBram Moolenaar  call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four'])
44179a213d6SBram Moolenaar  redraw
44279a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
44379a213d6SBram Moolenaar  diffthis
44479a213d6SBram Moolenaar
44579a213d6SBram Moolenaar  botright vert new two
446e828b762SBram Moolenaar  call setline(1, ["One\t ", "Two\t ", 'Three', 'one   two', 'onetwo', ' Four'])
44779a213d6SBram Moolenaar  diffthis
44879a213d6SBram Moolenaar
44979a213d6SBram Moolenaar  redraw
45079a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
45179a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
45279a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(3, 1))
453e828b762SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
454e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(5, 1))
455e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(6, 1))
45679a213d6SBram Moolenaar
45779a213d6SBram Moolenaar  diffoff!
45879a213d6SBram Moolenaar  %bwipe!
459e828b762SBram Moolenaarendfunc
460e828b762SBram Moolenaar
461e828b762SBram Moolenaarfunc Test_diffopt_iwhite()
462e828b762SBram Moolenaar  set diffopt=iwhite,foldcolumn:0
463e828b762SBram Moolenaar  call Common_iwhite_test()
464e828b762SBram Moolenaar  set diffopt&
465e828b762SBram Moolenaarendfunc
466e828b762SBram Moolenaar
467e828b762SBram Moolenaarfunc Test_diffopt_iwhite_internal()
468e828b762SBram Moolenaar  set diffopt=internal,iwhite,foldcolumn:0
469e828b762SBram Moolenaar  call Common_iwhite_test()
47079a213d6SBram Moolenaar  set diffopt&
47179a213d6SBram Moolenaarendfunc
47279a213d6SBram Moolenaar
47379a213d6SBram Moolenaarfunc Test_diffopt_context()
47479a213d6SBram Moolenaar  enew!
47579a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
47679a213d6SBram Moolenaar  diffthis
47779a213d6SBram Moolenaar  new
47879a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
47979a213d6SBram Moolenaar  diffthis
48079a213d6SBram Moolenaar
48179a213d6SBram Moolenaar  set diffopt=context:2
48279a213d6SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
483e828b762SBram Moolenaar  set diffopt=internal,context:2
484e828b762SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
485e828b762SBram Moolenaar
48679a213d6SBram Moolenaar  set diffopt=context:1
48779a213d6SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
488e828b762SBram Moolenaar  set diffopt=internal,context:1
489e828b762SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
49079a213d6SBram Moolenaar
49179a213d6SBram Moolenaar  diffoff!
49279a213d6SBram Moolenaar  %bwipe!
49379a213d6SBram Moolenaar  set diffopt&
49479a213d6SBram Moolenaarendfunc
49579a213d6SBram Moolenaar
49679a213d6SBram Moolenaarfunc Test_diffopt_horizontal()
497e828b762SBram Moolenaar  set diffopt=internal,horizontal
49879a213d6SBram Moolenaar  diffsplit
49979a213d6SBram Moolenaar
50079a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1))
50179a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(2))
50279a213d6SBram Moolenaar  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
50379a213d6SBram Moolenaar  call assert_inrange(0, 1, winheight(1) - winheight(2))
50479a213d6SBram Moolenaar
50579a213d6SBram Moolenaar  set diffopt&
50679a213d6SBram Moolenaar  diffoff!
50779a213d6SBram Moolenaar  %bwipe
50879a213d6SBram Moolenaarendfunc
50979a213d6SBram Moolenaar
51079a213d6SBram Moolenaarfunc Test_diffopt_vertical()
511e828b762SBram Moolenaar  set diffopt=internal,vertical
51279a213d6SBram Moolenaar  diffsplit
51379a213d6SBram Moolenaar
51479a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(1))
51579a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(2))
51679a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
51779a213d6SBram Moolenaar  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
51879a213d6SBram Moolenaar
51979a213d6SBram Moolenaar  set diffopt&
52079a213d6SBram Moolenaar  diffoff!
52179a213d6SBram Moolenaar  %bwipe
52279a213d6SBram Moolenaarendfunc
52379a213d6SBram Moolenaar
52497ce4192SBram Moolenaarfunc Test_diffopt_hiddenoff()
525e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0,hiddenoff
52697ce4192SBram Moolenaar  e! one
52797ce4192SBram Moolenaar  call setline(1, ['Two', 'Three'])
52897ce4192SBram Moolenaar  redraw
52997ce4192SBram Moolenaar  let normattr = screenattr(1, 1)
53097ce4192SBram Moolenaar  diffthis
53197ce4192SBram Moolenaar  botright vert new two
53297ce4192SBram Moolenaar  call setline(1, ['One', 'Four'])
53397ce4192SBram Moolenaar  diffthis
53497ce4192SBram Moolenaar  redraw
53597ce4192SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
53697ce4192SBram Moolenaar  set hidden
53797ce4192SBram Moolenaar  close
53897ce4192SBram Moolenaar  redraw
53997ce4192SBram Moolenaar  " should not diffing with hidden buffer two while 'hiddenoff' is enabled
54097ce4192SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
54197ce4192SBram Moolenaar
54297ce4192SBram Moolenaar  bwipe!
54397ce4192SBram Moolenaar  bwipe!
54497ce4192SBram Moolenaar  set hidden& diffopt&
54597ce4192SBram Moolenaarendfunc
54697ce4192SBram Moolenaar
54725ea0544SBram Moolenaarfunc Test_diffoff_hidden()
548e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0
54925ea0544SBram Moolenaar  e! one
55025ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
55179a213d6SBram Moolenaar  redraw
55225ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
55325ea0544SBram Moolenaar  diffthis
55425ea0544SBram Moolenaar  botright vert new two
55525ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
55625ea0544SBram Moolenaar  diffthis
55725ea0544SBram Moolenaar  redraw
55825ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
55925ea0544SBram Moolenaar  set hidden
56025ea0544SBram Moolenaar  close
56125ea0544SBram Moolenaar  redraw
56225ea0544SBram Moolenaar  " diffing with hidden buffer two
56325ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
56425ea0544SBram Moolenaar  diffoff
56525ea0544SBram Moolenaar  redraw
56625ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
56725ea0544SBram Moolenaar  diffthis
56825ea0544SBram Moolenaar  redraw
56925ea0544SBram Moolenaar  " still diffing with hidden buffer two
57025ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
57125ea0544SBram Moolenaar  diffoff!
57225ea0544SBram Moolenaar  redraw
57325ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
57425ea0544SBram Moolenaar  diffthis
57525ea0544SBram Moolenaar  redraw
57625ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
57725ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
57825ea0544SBram Moolenaar
57925ea0544SBram Moolenaar  bwipe!
58025ea0544SBram Moolenaar  bwipe!
58125ea0544SBram Moolenaar  set hidden& diffopt&
58225ea0544SBram Moolenaarendfunc
58325ea0544SBram Moolenaar
584025e3e0bSBram Moolenaarfunc Test_setting_cursor()
585025e3e0bSBram Moolenaar  new Xtest1
586025e3e0bSBram Moolenaar  put =range(1,90)
587025e3e0bSBram Moolenaar  wq
588025e3e0bSBram Moolenaar  new Xtest2
589025e3e0bSBram Moolenaar  put =range(1,100)
590025e3e0bSBram Moolenaar  wq
591025e3e0bSBram Moolenaar
592025e3e0bSBram Moolenaar  tabe Xtest2
593025e3e0bSBram Moolenaar  $
594025e3e0bSBram Moolenaar  diffsp Xtest1
595025e3e0bSBram Moolenaar  tabclose
596025e3e0bSBram Moolenaar
597025e3e0bSBram Moolenaar  call delete('Xtest1')
598025e3e0bSBram Moolenaar  call delete('Xtest2')
599025e3e0bSBram Moolenaarendfunc
600aeb661e1SBram Moolenaar
601aeb661e1SBram Moolenaarfunc Test_diff_move_to()
602aeb661e1SBram Moolenaar  new
603aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
604aeb661e1SBram Moolenaar  diffthis
605aeb661e1SBram Moolenaar  vnew
606aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
607aeb661e1SBram Moolenaar  diffthis
608aeb661e1SBram Moolenaar  norm ]c
609aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
610aeb661e1SBram Moolenaar  norm 3]c
611aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
612aeb661e1SBram Moolenaar  norm 10]c
613aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
614aeb661e1SBram Moolenaar  norm [c
615aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
616aeb661e1SBram Moolenaar  norm 2[c
617aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
618aeb661e1SBram Moolenaar  norm 10[c
619aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
620aeb661e1SBram Moolenaar  %bwipe!
621aeb661e1SBram Moolenaarendfunc
622aeb661e1SBram Moolenaar
62379a213d6SBram Moolenaarfunc Test_diffexpr()
624aeb313f3SBram Moolenaar  CheckExecutable diff
62579a213d6SBram Moolenaar
62679a213d6SBram Moolenaar  func DiffExpr()
627485b6271SBram Moolenaar    " Prepend some text to check diff type detection
6283b8defd0SBram Moolenaar    call writefile(['warning', '  message'], v:fname_out)
6293b8defd0SBram Moolenaar    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>>' . v:fname_out
63079a213d6SBram Moolenaar  endfunc
63179a213d6SBram Moolenaar  set diffexpr=DiffExpr()
63279a213d6SBram Moolenaar  set diffopt=foldcolumn:0
63379a213d6SBram Moolenaar
63479a213d6SBram Moolenaar  enew!
63579a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
63679a213d6SBram Moolenaar  redraw
63779a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
63879a213d6SBram Moolenaar  diffthis
63979a213d6SBram Moolenaar
64079a213d6SBram Moolenaar  botright vert new
64179a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three.'])
64279a213d6SBram Moolenaar  diffthis
64379a213d6SBram Moolenaar
64479a213d6SBram Moolenaar  redraw
64579a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
64679a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
64779a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
64879a213d6SBram Moolenaar
64979a213d6SBram Moolenaar  diffoff!
65079a213d6SBram Moolenaar  %bwipe!
65179a213d6SBram Moolenaar  set diffexpr& diffopt&
65279a213d6SBram Moolenaarendfunc
65379a213d6SBram Moolenaar
654aeb661e1SBram Moolenaarfunc Test_diffpatch()
655aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
6566d91bcb4SBram Moolenaar  CheckExecutable patch
6576d91bcb4SBram Moolenaar  CheckUnix
658aeb661e1SBram Moolenaar  new
659aeb661e1SBram Moolenaar  insert
660aeb661e1SBram Moolenaar***************
661aeb661e1SBram Moolenaar*** 1,3 ****
662aeb661e1SBram Moolenaar  1
663aeb661e1SBram Moolenaar! 2
664aeb661e1SBram Moolenaar  3
665aeb661e1SBram Moolenaar--- 1,4 ----
666aeb661e1SBram Moolenaar  1
667aeb661e1SBram Moolenaar! 2x
668aeb661e1SBram Moolenaar  3
669aeb661e1SBram Moolenaar+ 4
670aeb661e1SBram Moolenaar.
67197fbc404SBram Moolenaar  saveas! Xpatch
672aeb661e1SBram Moolenaar  bwipe!
673aeb661e1SBram Moolenaar  new
674aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
6751ef73e33SBram Moolenaar
676a95ab321SBram Moolenaar  for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch']
677aeb661e1SBram Moolenaar    call setline(1, ['1', '2', '3'])
6781ef73e33SBram Moolenaar    if name != 'Xpatch'
6791ef73e33SBram Moolenaar      call rename('Xpatch', name)
6801ef73e33SBram Moolenaar    endif
6811ef73e33SBram Moolenaar    exe 'diffpatch ' . escape(name, '$')
682aeb661e1SBram Moolenaar    call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
6831ef73e33SBram Moolenaar    if name != 'Xpatch'
6841ef73e33SBram Moolenaar      call rename(name, 'Xpatch')
6851ef73e33SBram Moolenaar    endif
6861ef73e33SBram Moolenaar    bwipe!
6871ef73e33SBram Moolenaar  endfor
6881ef73e33SBram Moolenaar
689aeb661e1SBram Moolenaar  call delete('Xpatch')
690aeb661e1SBram Moolenaar  bwipe!
691aeb661e1SBram Moolenaarendfunc
692aeb661e1SBram Moolenaar
693aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
694aeb661e1SBram Moolenaar  for i in range(1, 8)
695aeb661e1SBram Moolenaar    exe "new Xtest" . i
696aeb661e1SBram Moolenaar    diffthis
697aeb661e1SBram Moolenaar  endfor
698aeb661e1SBram Moolenaar  new Xtest9
699aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
700aeb661e1SBram Moolenaar  %bwipe!
701aeb661e1SBram Moolenaarendfunc
702aeb661e1SBram Moolenaar
703aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
704aeb661e1SBram Moolenaar  new
705aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
706aeb661e1SBram Moolenaar  setl nomodifiable
707aeb661e1SBram Moolenaar  diffthis
708aeb661e1SBram Moolenaar  vnew
709aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
710aeb661e1SBram Moolenaar  diffthis
711aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
712aeb661e1SBram Moolenaar  setl nomodifiable
713aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
714aeb661e1SBram Moolenaar  %bwipe!
715aeb661e1SBram Moolenaarendfunc
716f58a8475SBram Moolenaar
71797fbc404SBram Moolenaarfunc Test_diff_hlID()
71897fbc404SBram Moolenaar  new
71997fbc404SBram Moolenaar  call setline(1, [1, 2, 3])
72097fbc404SBram Moolenaar  diffthis
72197fbc404SBram Moolenaar  vnew
72297fbc404SBram Moolenaar  call setline(1, ['1x', 2, 'x', 3])
72397fbc404SBram Moolenaar  diffthis
72497fbc404SBram Moolenaar  redraw
72597fbc404SBram Moolenaar
726a74e4946SBram Moolenaar  call diff_hlID(-1, 1)->synIDattr("name")->assert_equal("")
72797fbc404SBram Moolenaar
728a74e4946SBram Moolenaar  call diff_hlID(1, 1)->synIDattr("name")->assert_equal("DiffChange")
729a74e4946SBram Moolenaar  call diff_hlID(1, 2)->synIDattr("name")->assert_equal("DiffText")
730a74e4946SBram Moolenaar  call diff_hlID(2, 1)->synIDattr("name")->assert_equal("")
731a74e4946SBram Moolenaar  call diff_hlID(3, 1)->synIDattr("name")->assert_equal("DiffAdd")
7321a3a8916SBram Moolenaar  eval 4->diff_hlID(1)->synIDattr("name")->assert_equal("")
73397fbc404SBram Moolenaar
73497fbc404SBram Moolenaar  wincmd w
73597fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
73697fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
73797fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "")
73897fbc404SBram Moolenaar
73997fbc404SBram Moolenaar  %bwipe!
74097fbc404SBram Moolenaarendfunc
74197fbc404SBram Moolenaar
74297fbc404SBram Moolenaarfunc Test_diff_filler()
74397fbc404SBram Moolenaar  new
74497fbc404SBram Moolenaar  call setline(1, [1, 2, 3, 'x', 4])
74597fbc404SBram Moolenaar  diffthis
74697fbc404SBram Moolenaar  vnew
74797fbc404SBram Moolenaar  call setline(1, [1, 2, 'y', 'y', 3, 4])
74897fbc404SBram Moolenaar  diffthis
74997fbc404SBram Moolenaar  redraw
75097fbc404SBram Moolenaar
7511a3a8916SBram Moolenaar  call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'v:val->diff_filler()'))
75297fbc404SBram Moolenaar  wincmd w
75397fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)'))
75497fbc404SBram Moolenaar
75597fbc404SBram Moolenaar  %bwipe!
75697fbc404SBram Moolenaarendfunc
75797fbc404SBram Moolenaar
758f58a8475SBram Moolenaarfunc Test_diff_lastline()
759f58a8475SBram Moolenaar  enew!
760f58a8475SBram Moolenaar  only!
761f58a8475SBram Moolenaar  call setline(1, ['This is a ', 'line with five ', 'rows'])
762f58a8475SBram Moolenaar  diffthis
763f58a8475SBram Moolenaar  botright vert new
764f58a8475SBram Moolenaar  call setline(1, ['This is', 'a line with ', 'four rows'])
765f58a8475SBram Moolenaar  diffthis
766f58a8475SBram Moolenaar  1
767f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
768f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
769f58a8475SBram Moolenaar  let w1lines = winline()
770f58a8475SBram Moolenaar  wincmd w
771f58a8475SBram Moolenaar  $
772f58a8475SBram Moolenaar  let w2lines = winline()
773f58a8475SBram Moolenaar  call assert_equal(w2lines, w1lines)
774f58a8475SBram Moolenaar  bwipe!
775f58a8475SBram Moolenaar  bwipe!
776f58a8475SBram Moolenaarendfunc
777e828b762SBram Moolenaar
778785fc656SBram Moolenaarfunc WriteDiffFiles(buf, list1, list2)
779e828b762SBram Moolenaar  call writefile(a:list1, 'Xfile1')
780e828b762SBram Moolenaar  call writefile(a:list2, 'Xfile2')
781785fc656SBram Moolenaar  if a:buf
782785fc656SBram Moolenaar    call term_sendkeys(a:buf, ":checktime\<CR>")
783785fc656SBram Moolenaar  endif
784e828b762SBram Moolenaarendfunc
785e828b762SBram Moolenaar
786785fc656SBram Moolenaar" Verify a screendump with both the internal and external diff.
787e828b762SBram Moolenaarfunc VerifyBoth(buf, dumpfile, extra)
788e828b762SBram Moolenaar  " trailing : for leaving the cursor on the command line
789785fc656SBram Moolenaar  for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"]
790e828b762SBram Moolenaar    call term_sendkeys(a:buf, cmd)
791e828b762SBram Moolenaar    if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
792485b6271SBram Moolenaar      " don't let the next iteration overwrite the "failed" file.
793485b6271SBram Moolenaar      return
794e828b762SBram Moolenaar    endif
795e828b762SBram Moolenaar  endfor
796485b6271SBram Moolenaar
797485b6271SBram Moolenaar  " also test unified diff
798485b6271SBram Moolenaar  call term_sendkeys(a:buf, ":call SetupUnified()\<CR>:")
799*ad5c178aSglacambre  call term_sendkeys(a:buf, ":redraw!\<CR>:")
800485b6271SBram Moolenaar  call VerifyScreenDump(a:buf, a:dumpfile, {}, 'unified')
801485b6271SBram Moolenaar  call term_sendkeys(a:buf, ":call StopUnified()\<CR>:")
802e828b762SBram Moolenaarendfunc
803e828b762SBram Moolenaar
804785fc656SBram Moolenaar" Verify a screendump with the internal diff only.
805785fc656SBram Moolenaarfunc VerifyInternal(buf, dumpfile, extra)
806785fc656SBram Moolenaar  call term_sendkeys(a:buf, ":diffupdate!\<CR>")
807785fc656SBram Moolenaar  " trailing : for leaving the cursor on the command line
808785fc656SBram Moolenaar  call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:")
8096a2c5a7dSBram Moolenaar  call TermWait(a:buf)
810785fc656SBram Moolenaar  call VerifyScreenDump(a:buf, a:dumpfile, {})
811785fc656SBram Moolenaarendfunc
812785fc656SBram Moolenaar
813e828b762SBram Moolenaarfunc Test_diff_screen()
8143c8ee629SBram Moolenaar  CheckScreendump
8153c8ee629SBram Moolenaar  CheckFeature menu
8163c8ee629SBram Moolenaar
817485b6271SBram Moolenaar  let lines =<< trim END
818485b6271SBram Moolenaar      func UnifiedDiffExpr()
819485b6271SBram Moolenaar        " Prepend some text to check diff type detection
820485b6271SBram Moolenaar        call writefile(['warning', '  message'], v:fname_out)
821*ad5c178aSglacambre        silent exe '!diff -U0 ' .. v:fname_in .. ' ' .. v:fname_new .. '>>' .. v:fname_out
822485b6271SBram Moolenaar      endfunc
823485b6271SBram Moolenaar      func SetupUnified()
824485b6271SBram Moolenaar        set diffexpr=UnifiedDiffExpr()
825*ad5c178aSglacambre        diffupdate
826485b6271SBram Moolenaar      endfunc
827485b6271SBram Moolenaar      func StopUnified()
828485b6271SBram Moolenaar        set diffexpr=
829485b6271SBram Moolenaar      endfunc
830485b6271SBram Moolenaar  END
831485b6271SBram Moolenaar  call writefile(lines, 'XdiffSetup')
832485b6271SBram Moolenaar
833e828b762SBram Moolenaar  " clean up already existing swap files, just in case
834e828b762SBram Moolenaar  call delete('.Xfile1.swp')
835e828b762SBram Moolenaar  call delete('.Xfile2.swp')
836e828b762SBram Moolenaar
837e828b762SBram Moolenaar  " Test 1: Add a line in beginning of file 2
838785fc656SBram 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])
839485b6271SBram Moolenaar  let buf = RunVimInTerminal('-d -S XdiffSetup Xfile1 Xfile2', {})
8408ee4c01bSBram Moolenaar  " Set autoread mode, so that Vim won't complain once we re-write the test
841e828b762SBram Moolenaar  " files
842785fc656SBram Moolenaar  call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
843e828b762SBram Moolenaar
844e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_01', '')
845e828b762SBram Moolenaar
846e828b762SBram Moolenaar  " Test 2: Add a line in beginning of file 1
847785fc656SBram 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])
848e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_02', '')
849e828b762SBram Moolenaar
850e828b762SBram Moolenaar  " Test 3: Add a line at the end of file 2
851785fc656SBram 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])
852e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_03', '')
853e828b762SBram Moolenaar
854e828b762SBram Moolenaar  " Test 4: Add a line at the end of file 1
855785fc656SBram 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])
856e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_04', '')
857e828b762SBram Moolenaar
858e828b762SBram Moolenaar  " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
859785fc656SBram 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])
860e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_05', '')
861e828b762SBram Moolenaar
862e828b762SBram Moolenaar  " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
863785fc656SBram 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])
864e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_06', '')
865e828b762SBram Moolenaar
866b9ddda6cSBram Moolenaar  " Variants on test 6 with different context settings
867b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:2\<cr>")
868b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.2', {})
869b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:2\<cr>")
870b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:1\<cr>")
871b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.1', {})
872b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:1\<cr>")
873b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:0\<cr>")
874b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.0', {})
875b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:0\<cr>")
876b9ddda6cSBram Moolenaar
877e828b762SBram Moolenaar  " Test 7 - 9: Test normal/patience/histogram diff algorithm
878785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
879e828b762SBram Moolenaar      \ '    int i;', '    for(i = 0; i < 10; i++)', '    {', '        printf("Your answer is: ");',
880e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '', 'int fact(int n)', '{', '    if(n > 1)', '    {',
881e828b762SBram Moolenaar      \ '        return fact(n-1) * n;', '    }', '    return 1;', '}', '', 'int main(int argc, char **argv)',
882e828b762SBram Moolenaar      \ '{', '    frobnitz(fact(10));', '}'],
883e828b762SBram Moolenaar      \ ['#include <stdio.h>', '', 'int fib(int n)', '{', '    if(n > 2)', '    {',
884e828b762SBram Moolenaar      \ '        return fib(n-1) + fib(n-2);', '    }', '    return 1;', '}', '', '// Frobs foo heartily',
885e828b762SBram Moolenaar      \ 'int frobnitz(int foo)', '{', '    int i;', '    for(i = 0; i < 10; i++)', '    {',
886e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '',
887e828b762SBram Moolenaar      \ 'int main(int argc, char **argv)', '{', '    frobnitz(fib(10));', '}'])
888e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
889e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
890e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_07', {})
891e828b762SBram Moolenaar
892e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>")
893e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_08', {})
894e828b762SBram Moolenaar
895e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>")
896e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_09', {})
897e828b762SBram Moolenaar
898e828b762SBram Moolenaar  " Test 10-11: normal/indent-heuristic
899e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim\<cr>")
900785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['', '  def finalize(values)', '', '    values.each do |v|', '      v.finalize', '    end'],
901e828b762SBram Moolenaar      \ ['', '  def finalize(values)', '', '    values.each do |v|', '      v.prepare', '    end', '',
902e828b762SBram Moolenaar      \ '    values.each do |v|', '      v.finalize', '    end'])
903e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
904e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
905e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_10', {})
906e828b762SBram Moolenaar
907b6fc7285SBram Moolenaar  " Leave trailing : at commandline!
908b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>:\<cr>")
909b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'one')
910b6fc7285SBram Moolenaar  " shouldn't matter, if indent-algorithm comes before or after the algorithm
911b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&\<cr>")
912b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=indent-heuristic,algorithm:patience\<cr>:\<cr>")
913b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'two')
914b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&\<cr>")
915b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:patience,indent-heuristic\<cr>:\<cr>")
916b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'three')
917e828b762SBram Moolenaar
918e828b762SBram Moolenaar  " Test 12: diff the same file
919785fc656SBram Moolenaar  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
920e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_12', '')
921e828b762SBram Moolenaar
922e828b762SBram Moolenaar  " Test 13: diff an empty file
923785fc656SBram Moolenaar  call WriteDiffFiles(buf, [], [])
924e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_13', '')
925e828b762SBram Moolenaar
926e828b762SBram Moolenaar  " Test 14: test diffopt+=icase
927785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe'])
928e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
929e828b762SBram Moolenaar
930e828b762SBram Moolenaar  " Test 15-16: test diffopt+=iwhite
931785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['int main()', '{', '   printf("Hello, World!");', '   return 0;', '}'],
932e828b762SBram Moolenaar      \ ['int main()', '{', '   if (0)', '   {', '      printf("Hello, World!");', '      return 0;', '   }', '}'])
933e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
934e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
935e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_15', {})
936e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
937e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_16', {})
938e828b762SBram Moolenaar
939785fc656SBram Moolenaar  " Test 17: test diffopt+=iblank
940785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy'])
941785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank")
942785fc656SBram Moolenaar
943785fc656SBram Moolenaar  " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol
944785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite")
945785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall")
946785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol")
947785fc656SBram Moolenaar
948785fc656SBram Moolenaar  " Test 19: test diffopt+=iwhiteeol
949785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx  xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar'])
950785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol")
951785fc656SBram Moolenaar
952785fc656SBram Moolenaar  " Test 19: test diffopt+=iwhiteall
953785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall")
954785fc656SBram Moolenaar
955e828b762SBram Moolenaar  " clean up
956e828b762SBram Moolenaar  call StopVimInTerminal(buf)
957e828b762SBram Moolenaar  call delete('Xfile1')
958e828b762SBram Moolenaar  call delete('Xfile2')
959485b6271SBram Moolenaar  call delete('XdiffSetup')
960e828b762SBram Moolenaarendfunc
961e828b762SBram Moolenaar
9624a5abbd6SBram Moolenaarfunc Test_diff_with_cursorline()
9633c8ee629SBram Moolenaar  CheckScreendump
9644a5abbd6SBram Moolenaar
9654a5abbd6SBram Moolenaar  call writefile([
9664a5abbd6SBram Moolenaar	\ 'hi CursorLine ctermbg=red ctermfg=white',
9674a5abbd6SBram Moolenaar	\ 'set cursorline',
9684a5abbd6SBram Moolenaar	\ 'call setline(1, ["foo","foo","foo","bar"])',
9694a5abbd6SBram Moolenaar	\ 'vnew',
9704a5abbd6SBram Moolenaar	\ 'call setline(1, ["bee","foo","foo","baz"])',
9714a5abbd6SBram Moolenaar	\ 'windo diffthis',
9724a5abbd6SBram Moolenaar	\ '2wincmd w',
9734a5abbd6SBram Moolenaar	\ ], 'Xtest_diff_cursorline')
9744a5abbd6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {})
9754a5abbd6SBram Moolenaar
9764a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {})
9774a5abbd6SBram Moolenaar  call term_sendkeys(buf, "j")
9784a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {})
9794a5abbd6SBram Moolenaar  call term_sendkeys(buf, "j")
9804a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {})
9814a5abbd6SBram Moolenaar
9824a5abbd6SBram Moolenaar  " clean up
9834a5abbd6SBram Moolenaar  call StopVimInTerminal(buf)
9844a5abbd6SBram Moolenaar  call delete('Xtest_diff_cursorline')
9854a5abbd6SBram Moolenaarendfunc
986f7acf2b6SBram Moolenaar
987248fdb33SBram Moolenaarfunc Test_diff_with_syntax()
988248fdb33SBram Moolenaar  CheckScreendump
989248fdb33SBram Moolenaar
990248fdb33SBram Moolenaar  let lines =<< trim END
991248fdb33SBram Moolenaar  	void doNothing() {
992248fdb33SBram Moolenaar	   int x = 0;
993248fdb33SBram Moolenaar	   char *s = "hello";
994248fdb33SBram Moolenaar	   return 5;
995248fdb33SBram Moolenaar	}
996248fdb33SBram Moolenaar  END
997248fdb33SBram Moolenaar  call writefile(lines, 'Xprogram1.c')
998248fdb33SBram Moolenaar  let lines =<< trim END
999248fdb33SBram Moolenaar  	void doSomething() {
1000248fdb33SBram Moolenaar	   int x = 0;
1001248fdb33SBram Moolenaar	   char *s = "there";
1002248fdb33SBram Moolenaar	   return 5;
1003248fdb33SBram Moolenaar	}
1004248fdb33SBram Moolenaar  END
1005248fdb33SBram Moolenaar  call writefile(lines, 'Xprogram2.c')
1006248fdb33SBram Moolenaar
1007248fdb33SBram Moolenaar  let lines =<< trim END
1008248fdb33SBram Moolenaar  	edit Xprogram1.c
1009248fdb33SBram Moolenaar	diffsplit Xprogram2.c
1010248fdb33SBram Moolenaar  END
1011248fdb33SBram Moolenaar  call writefile(lines, 'Xtest_diff_syntax')
1012248fdb33SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_syntax', {})
1013248fdb33SBram Moolenaar
1014248fdb33SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_syntax_1', {})
1015248fdb33SBram Moolenaar
1016248fdb33SBram Moolenaar  " clean up
1017248fdb33SBram Moolenaar  call StopVimInTerminal(buf)
1018248fdb33SBram Moolenaar  call delete('Xtest_diff_syntax')
1019248fdb33SBram Moolenaar  call delete('Xprogram1.c')
1020248fdb33SBram Moolenaar  call delete('Xprogram2.c')
1021248fdb33SBram Moolenaarendfunc
1022248fdb33SBram Moolenaar
1023f7acf2b6SBram Moolenaarfunc Test_diff_of_diff()
10243c8ee629SBram Moolenaar  CheckScreendump
10253c8ee629SBram Moolenaar  CheckFeature rightleft
1026f7acf2b6SBram Moolenaar
1027f7acf2b6SBram Moolenaar  call writefile([
1028f7acf2b6SBram Moolenaar	\ 'call setline(1, ["aa","bb","cc","@@ -3,2 +5,7 @@","dd","ee","ff"])',
1029f7acf2b6SBram Moolenaar	\ 'vnew',
1030f7acf2b6SBram Moolenaar	\ 'call setline(1, ["aa","bb","cc"])',
1031f7acf2b6SBram Moolenaar	\ 'windo diffthis',
10328ee4c01bSBram Moolenaar	\ '1wincmd w',
10338ee4c01bSBram Moolenaar	\ 'setlocal number',
1034f7acf2b6SBram Moolenaar	\ ], 'Xtest_diff_diff')
1035f7acf2b6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_diff', {})
1036f7acf2b6SBram Moolenaar
1037f7acf2b6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_of_diff_01', {})
1038f7acf2b6SBram Moolenaar
1039e73f911cSBram Moolenaar  call term_sendkeys(buf, ":set rightleft\<cr>")
1040e73f911cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_of_diff_02', {})
1041e73f911cSBram Moolenaar
1042f7acf2b6SBram Moolenaar  " clean up
1043f7acf2b6SBram Moolenaar  call StopVimInTerminal(buf)
1044f7acf2b6SBram Moolenaar  call delete('Xtest_diff_diff')
1045f7acf2b6SBram Moolenaarendfunc
1046c8234779SBram Moolenaar
1047c8234779SBram Moolenaarfunc CloseoffSetup()
1048c8234779SBram Moolenaar  enew
1049c8234779SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
1050c8234779SBram Moolenaar  diffthis
1051c8234779SBram Moolenaar  new
1052c8234779SBram Moolenaar  call setline(1, ['one', 'tow', 'three'])
1053c8234779SBram Moolenaar  diffthis
1054c8234779SBram Moolenaar  call assert_equal(1, &diff)
1055c8234779SBram Moolenaar  only!
1056c8234779SBram Moolenaarendfunc
1057c8234779SBram Moolenaar
1058c8234779SBram Moolenaarfunc Test_diff_closeoff()
1059c8234779SBram Moolenaar  " "closeoff" included by default: last diff win gets 'diff' reset'
1060c8234779SBram Moolenaar  call CloseoffSetup()
1061c8234779SBram Moolenaar  call assert_equal(0, &diff)
1062c8234779SBram Moolenaar  enew!
1063c8234779SBram Moolenaar
1064c8234779SBram Moolenaar  " "closeoff" excluded: last diff win keeps 'diff' set'
1065c8234779SBram Moolenaar  set diffopt-=closeoff
1066c8234779SBram Moolenaar  call CloseoffSetup()
1067c8234779SBram Moolenaar  call assert_equal(1, &diff)
1068c8234779SBram Moolenaar  diffoff!
1069c8234779SBram Moolenaar  enew!
1070c8234779SBram Moolenaarendfunc
1071f4a1d1c0SBram Moolenaar
10724223d43cSBram Moolenaarfunc Test_diff_followwrap()
10734223d43cSBram Moolenaar  new
10744223d43cSBram Moolenaar  set diffopt+=followwrap
10754223d43cSBram Moolenaar  set wrap
10764223d43cSBram Moolenaar  diffthis
10774223d43cSBram Moolenaar  call assert_equal(1, &wrap)
10784223d43cSBram Moolenaar  diffoff
10794223d43cSBram Moolenaar  set nowrap
10804223d43cSBram Moolenaar  diffthis
10814223d43cSBram Moolenaar  call assert_equal(0, &wrap)
10824223d43cSBram Moolenaar  diffoff
10834223d43cSBram Moolenaar  set diffopt&
10844223d43cSBram Moolenaar  bwipe!
10854223d43cSBram Moolenaarendfunc
10864223d43cSBram Moolenaar
1087f4a1d1c0SBram Moolenaarfunc Test_diff_maintains_change_mark()
1088f4a1d1c0SBram Moolenaar  enew!
1089f4a1d1c0SBram Moolenaar  call setline(1, ['a', 'b', 'c', 'd'])
1090f4a1d1c0SBram Moolenaar  diffthis
1091f4a1d1c0SBram Moolenaar  new
1092f4a1d1c0SBram Moolenaar  call setline(1, ['a', 'b', 'c', 'e'])
1093f4a1d1c0SBram Moolenaar  " Set '[ and '] marks
1094f4a1d1c0SBram Moolenaar  2,3yank
1095f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1096f4a1d1c0SBram Moolenaar  " Verify they aren't affected by the implicit diff
1097f4a1d1c0SBram Moolenaar  diffthis
1098f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1099f4a1d1c0SBram Moolenaar  " Verify they aren't affected by an explicit diff
1100f4a1d1c0SBram Moolenaar  diffupdate
1101f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1102f4a1d1c0SBram Moolenaar  bwipe!
1103f4a1d1c0SBram Moolenaar  bwipe!
1104f4a1d1c0SBram Moolenaarendfunc
11058dfcce3aSBram Moolenaar
11068dfcce3aSBram Moolenaar" Test for 'patchexpr'
11078dfcce3aSBram Moolenaarfunc Test_patchexpr()
11088dfcce3aSBram Moolenaar  let g:patch_args = []
11098dfcce3aSBram Moolenaar  func TPatch()
11108dfcce3aSBram Moolenaar    call add(g:patch_args, readfile(v:fname_in))
11118dfcce3aSBram Moolenaar    call add(g:patch_args, readfile(v:fname_diff))
11128dfcce3aSBram Moolenaar    call writefile(['output file'], v:fname_out)
11138dfcce3aSBram Moolenaar  endfunc
11148dfcce3aSBram Moolenaar  set patchexpr=TPatch()
11158dfcce3aSBram Moolenaar
11168dfcce3aSBram Moolenaar  call writefile(['input file'], 'Xinput')
11178dfcce3aSBram Moolenaar  call writefile(['diff file'], 'Xdiff')
11188dfcce3aSBram Moolenaar  %bwipe!
11198dfcce3aSBram Moolenaar  edit Xinput
11208dfcce3aSBram Moolenaar  diffpatch Xdiff
11218dfcce3aSBram Moolenaar  call assert_equal('output file', getline(1))
11228dfcce3aSBram Moolenaar  call assert_equal('Xinput.new', bufname())
11238dfcce3aSBram Moolenaar  call assert_equal(2, winnr('$'))
11248dfcce3aSBram Moolenaar  call assert_true(&diff)
11258dfcce3aSBram Moolenaar
11268dfcce3aSBram Moolenaar  call delete('Xinput')
11278dfcce3aSBram Moolenaar  call delete('Xdiff')
11288dfcce3aSBram Moolenaar  set patchexpr&
11298dfcce3aSBram Moolenaar  delfunc TPatch
11308dfcce3aSBram Moolenaar  %bwipe!
11318dfcce3aSBram Moolenaarendfunc
11328dfcce3aSBram Moolenaar
1133511feec6SBram Moolenaarfunc Test_diff_rnu()
1134511feec6SBram Moolenaar  CheckScreendump
1135511feec6SBram Moolenaar
1136511feec6SBram Moolenaar  let content =<< trim END
1137511feec6SBram Moolenaar    call setline(1, ['a', 'a', 'a', 'y', 'b', 'b', 'b', 'b', 'b'])
1138511feec6SBram Moolenaar    vnew
1139511feec6SBram Moolenaar    call setline(1, ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b', 'b', 'b'])
1140511feec6SBram Moolenaar    windo diffthis
1141511feec6SBram Moolenaar    setlocal number rnu foldcolumn=0
1142511feec6SBram Moolenaar  END
1143511feec6SBram Moolenaar  call writefile(content, 'Xtest_diff_rnu')
1144511feec6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_rnu', {})
1145511feec6SBram Moolenaar
1146511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_01', {})
1147511feec6SBram Moolenaar
1148511feec6SBram Moolenaar  call term_sendkeys(buf, "j")
1149511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_02', {})
1150511feec6SBram Moolenaar  call term_sendkeys(buf, "j")
1151511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_03', {})
1152511feec6SBram Moolenaar
1153511feec6SBram Moolenaar  " clean up
1154511feec6SBram Moolenaar  call StopVimInTerminal(buf)
1155511feec6SBram Moolenaar  call delete('Xtest_diff_rnu')
1156511feec6SBram Moolenaarendfunc
1157511feec6SBram Moolenaar
1158fc838d6cSBram Moolenaarfunc Test_diff_multilineconceal()
1159fc838d6cSBram Moolenaar  new
1160fc838d6cSBram Moolenaar  diffthis
1161fc838d6cSBram Moolenaar
1162fc838d6cSBram Moolenaar  new
1163fc838d6cSBram Moolenaar  call matchadd('Conceal', 'a\nb', 9, -1, {'conceal': 'Y'})
1164fc838d6cSBram Moolenaar  set cole=2 cocu=n
1165fc838d6cSBram Moolenaar  call setline(1, ["a", "b"])
1166fc838d6cSBram Moolenaar  diffthis
1167fc838d6cSBram Moolenaar  redraw
1168fc838d6cSBram Moolenaarendfunc
1169fc838d6cSBram Moolenaar
11708455c5edSBram Moolenaarfunc Test_diff_and_scroll()
11718455c5edSBram Moolenaar  " this was causing an ml_get error
11728455c5edSBram Moolenaar  set ls=2
11738455c5edSBram Moolenaar  for i in range(winheight(0) * 2)
11748455c5edSBram Moolenaar    call setline(i, i < winheight(0) - 10 ? i : i + 10)
11758455c5edSBram Moolenaar  endfor
11768455c5edSBram Moolenaar  vnew
11778455c5edSBram Moolenaar  for i in range(winheight(0)*2 + 10)
11788455c5edSBram Moolenaar    call setline(i, i < winheight(0) - 10 ? 0 : i)
11798455c5edSBram Moolenaar  endfor
11808455c5edSBram Moolenaar  diffthis
11818455c5edSBram Moolenaar  wincmd p
11828455c5edSBram Moolenaar  diffthis
11838455c5edSBram Moolenaar  execute 'normal ' . winheight(0) . "\<C-d>"
11848455c5edSBram Moolenaar
11858455c5edSBram Moolenaar  bwipe!
11868455c5edSBram Moolenaar  bwipe!
11878455c5edSBram Moolenaar  set ls&
11888455c5edSBram Moolenaarendfunc
11898455c5edSBram Moolenaar
1190fabc3ca8SBram Moolenaarfunc Test_diff_filler_cursorcolumn()
1191fabc3ca8SBram Moolenaar  CheckScreendump
1192fabc3ca8SBram Moolenaar
1193fabc3ca8SBram Moolenaar  let content =<< trim END
1194fabc3ca8SBram Moolenaar    call setline(1, ['aa', 'bb', 'cc'])
1195fabc3ca8SBram Moolenaar    vnew
1196fabc3ca8SBram Moolenaar    call setline(1, ['aa', 'cc'])
1197fabc3ca8SBram Moolenaar    windo diffthis
1198fabc3ca8SBram Moolenaar    wincmd p
1199fabc3ca8SBram Moolenaar    setlocal cursorcolumn foldcolumn=0
1200fabc3ca8SBram Moolenaar    norm! gg0
1201fabc3ca8SBram Moolenaar    redraw!
1202fabc3ca8SBram Moolenaar  END
1203fabc3ca8SBram Moolenaar  call writefile(content, 'Xtest_diff_cuc')
1204fabc3ca8SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_cuc', {})
1205fabc3ca8SBram Moolenaar
1206fabc3ca8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_cuc_01', {})
1207fabc3ca8SBram Moolenaar
1208fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "l")
1209fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "\<C-l>")
1210fabc3ca8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_cuc_02', {})
1211fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "0j")
1212fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "\<C-l>")
1213fabc3ca8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_cuc_03', {})
1214fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "l")
1215fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "\<C-l>")
1216fabc3ca8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_cuc_04', {})
1217fabc3ca8SBram Moolenaar
1218fabc3ca8SBram Moolenaar  " clean up
1219fabc3ca8SBram Moolenaar  call StopVimInTerminal(buf)
1220fabc3ca8SBram Moolenaar  call delete('Xtest_diff_cuc')
1221fabc3ca8SBram Moolenaarendfunc
1222fabc3ca8SBram Moolenaar
1223*ad5c178aSglacambre
12248dfcce3aSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
1225