142093c0eSBram Moolenaar" Tests for diff mode
2e828b762SBram Moolenaarsource shared.vim
3e828b762SBram Moolenaarsource screendump.vim
43c8ee629SBram Moolenaarsource check.vim
542093c0eSBram Moolenaar
642093c0eSBram Moolenaarfunc Test_diff_fold_sync()
742093c0eSBram Moolenaar  enew!
8e8fa05b5SBram Moolenaar  let g:update_count = 0
9e8fa05b5SBram Moolenaar  au DiffUpdated * let g:update_count += 1
10e8fa05b5SBram Moolenaar
1142093c0eSBram Moolenaar  let l = range(50)
1242093c0eSBram Moolenaar  call setline(1, l)
1342093c0eSBram Moolenaar  diffthis
1442093c0eSBram Moolenaar  let winone = win_getid()
1542093c0eSBram Moolenaar  new
1642093c0eSBram Moolenaar  let l[25] = 'diff'
1742093c0eSBram Moolenaar  call setline(1, l)
1842093c0eSBram Moolenaar  diffthis
1942093c0eSBram Moolenaar  let wintwo = win_getid()
2042093c0eSBram Moolenaar  " line 15 is inside the closed fold
2142093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
2242093c0eSBram Moolenaar  call win_gotoid(winone)
2342093c0eSBram Moolenaar  call assert_equal(19, foldclosedend(10))
2442093c0eSBram Moolenaar  " open the fold
2542093c0eSBram Moolenaar  normal zv
2642093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
2742093c0eSBram Moolenaar  " fold in other window must have opened too
2842093c0eSBram Moolenaar  call win_gotoid(wintwo)
2942093c0eSBram Moolenaar  call assert_equal(-1, foldclosedend(10))
3042093c0eSBram Moolenaar
3142093c0eSBram Moolenaar  " cursor position is in sync
3242093c0eSBram Moolenaar  normal 23G
3342093c0eSBram Moolenaar  call win_gotoid(winone)
3442093c0eSBram Moolenaar  call assert_equal(23, getcurpos()[1])
3542093c0eSBram Moolenaar
36e8fa05b5SBram Moolenaar  call assert_equal(1, g:update_count)
37e8fa05b5SBram Moolenaar  au! DiffUpdated
38e8fa05b5SBram Moolenaar
3942093c0eSBram Moolenaar  windo diffoff
4042093c0eSBram Moolenaar  close!
4142093c0eSBram Moolenaar  set nomodified
4242093c0eSBram Moolenaarendfunc
4342093c0eSBram Moolenaar
4442093c0eSBram Moolenaarfunc Test_vert_split()
45e828b762SBram Moolenaar  set diffopt=filler
46e828b762SBram Moolenaar  call Common_vert_split()
47e828b762SBram Moolenaar  set diffopt&
48e828b762SBram Moolenaarendfunc
49e828b762SBram Moolenaar
50e828b762SBram Moolenaarfunc Test_vert_split_internal()
51e828b762SBram Moolenaar  set diffopt=internal,filler
52e828b762SBram Moolenaar  call Common_vert_split()
53e828b762SBram Moolenaar  set diffopt&
54e828b762SBram Moolenaarendfunc
55e828b762SBram Moolenaar
56e828b762SBram Moolenaarfunc Common_vert_split()
5742093c0eSBram Moolenaar  " Disable the title to avoid xterm keeping the wrong one.
5842093c0eSBram Moolenaar  set notitle noicon
5942093c0eSBram Moolenaar  new
6042093c0eSBram Moolenaar  let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee']
6142093c0eSBram Moolenaar  call setline(1, l)
6242093c0eSBram Moolenaar  w! Xtest
6342093c0eSBram Moolenaar  normal dd
6442093c0eSBram Moolenaar  $
6542093c0eSBram Moolenaar  put
6642093c0eSBram Moolenaar  normal kkrXoxxx
6742093c0eSBram Moolenaar  w! Xtest2
6842093c0eSBram Moolenaar  file Nop
6942093c0eSBram Moolenaar  normal ggoyyyjjjozzzz
7042093c0eSBram Moolenaar  set foldmethod=marker foldcolumn=4
7142093c0eSBram Moolenaar  call assert_equal(0, &diff)
7242093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
7342093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
7442093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
7542093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
7642093c0eSBram Moolenaar  call assert_equal(1, &wrap)
7742093c0eSBram Moolenaar
7842093c0eSBram Moolenaar  vert diffsplit Xtest
7942093c0eSBram Moolenaar  vert diffsplit Xtest2
8042093c0eSBram Moolenaar  call assert_equal(1, &diff)
8142093c0eSBram Moolenaar  call assert_equal('diff', &foldmethod)
8242093c0eSBram Moolenaar  call assert_equal(2, &foldcolumn)
8342093c0eSBram Moolenaar  call assert_equal(1, &scrollbind)
8442093c0eSBram Moolenaar  call assert_equal(1, &cursorbind)
8542093c0eSBram Moolenaar  call assert_equal(0, &wrap)
8642093c0eSBram Moolenaar
8742093c0eSBram Moolenaar  let diff_fdm = &fdm
8842093c0eSBram Moolenaar  let diff_fdc = &fdc
8942093c0eSBram Moolenaar  " repeat entering diff mode here to see if this saves the wrong settings
9042093c0eSBram Moolenaar  diffthis
9142093c0eSBram Moolenaar  " jump to second window for a moment to have filler line appear at start of
9242093c0eSBram Moolenaar  " first window
9342093c0eSBram Moolenaar  wincmd w
9442093c0eSBram Moolenaar  normal gg
9542093c0eSBram Moolenaar  wincmd p
9642093c0eSBram Moolenaar  normal gg
9742093c0eSBram Moolenaar  call assert_equal(2, winline())
9842093c0eSBram Moolenaar  normal j
9942093c0eSBram Moolenaar  call assert_equal(4, winline())
10042093c0eSBram Moolenaar  normal j
10142093c0eSBram Moolenaar  call assert_equal(5, winline())
10242093c0eSBram Moolenaar  normal j
10342093c0eSBram Moolenaar  call assert_equal(6, winline())
10442093c0eSBram Moolenaar  normal j
10542093c0eSBram Moolenaar  call assert_equal(8, winline())
10642093c0eSBram Moolenaar  normal j
10742093c0eSBram Moolenaar  call assert_equal(9, winline())
10842093c0eSBram Moolenaar
10942093c0eSBram Moolenaar  wincmd w
11042093c0eSBram Moolenaar  normal gg
11142093c0eSBram Moolenaar  call assert_equal(1, winline())
11242093c0eSBram Moolenaar  normal j
11342093c0eSBram Moolenaar  call assert_equal(2, winline())
11442093c0eSBram Moolenaar  normal j
11542093c0eSBram Moolenaar  call assert_equal(4, winline())
11642093c0eSBram Moolenaar  normal j
11742093c0eSBram Moolenaar  call assert_equal(5, winline())
11842093c0eSBram Moolenaar  normal j
11942093c0eSBram Moolenaar  call assert_equal(8, winline())
12042093c0eSBram Moolenaar
12142093c0eSBram Moolenaar  wincmd w
12242093c0eSBram Moolenaar  normal gg
12342093c0eSBram Moolenaar  call assert_equal(2, winline())
12442093c0eSBram Moolenaar  normal j
12542093c0eSBram Moolenaar  call assert_equal(3, winline())
12642093c0eSBram Moolenaar  normal j
12742093c0eSBram Moolenaar  call assert_equal(4, winline())
12842093c0eSBram Moolenaar  normal j
12942093c0eSBram Moolenaar  call assert_equal(5, winline())
13042093c0eSBram Moolenaar  normal j
13142093c0eSBram Moolenaar  call assert_equal(6, winline())
13242093c0eSBram Moolenaar  normal j
13342093c0eSBram Moolenaar  call assert_equal(7, winline())
13442093c0eSBram Moolenaar  normal j
13542093c0eSBram Moolenaar  call assert_equal(8, winline())
13642093c0eSBram Moolenaar
13742093c0eSBram Moolenaar  " Test diffoff
13842093c0eSBram Moolenaar  diffoff!
13942093c0eSBram Moolenaar  1wincmd 2
14042093c0eSBram Moolenaar  let &diff = 1
14142093c0eSBram Moolenaar  let &fdm = diff_fdm
14242093c0eSBram Moolenaar  let &fdc = diff_fdc
14342093c0eSBram Moolenaar  4wincmd w
14442093c0eSBram Moolenaar  diffoff!
14542093c0eSBram Moolenaar  1wincmd w
14642093c0eSBram Moolenaar  call assert_equal(0, &diff)
14742093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
14842093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
14942093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
15042093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
15142093c0eSBram Moolenaar  call assert_equal(1, &wrap)
15242093c0eSBram Moolenaar
15342093c0eSBram Moolenaar  wincmd w
15442093c0eSBram Moolenaar  call assert_equal(0, &diff)
15542093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
15642093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
15742093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
15842093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
15942093c0eSBram Moolenaar  call assert_equal(1, &wrap)
16042093c0eSBram Moolenaar
16142093c0eSBram Moolenaar  wincmd w
16242093c0eSBram Moolenaar  call assert_equal(0, &diff)
16342093c0eSBram Moolenaar  call assert_equal('marker', &foldmethod)
16442093c0eSBram Moolenaar  call assert_equal(4, &foldcolumn)
16542093c0eSBram Moolenaar  call assert_equal(0, &scrollbind)
16642093c0eSBram Moolenaar  call assert_equal(0, &cursorbind)
16742093c0eSBram Moolenaar  call assert_equal(1, &wrap)
16842093c0eSBram Moolenaar
169623cf88fSBram Moolenaar  call delete('Xtest')
170623cf88fSBram Moolenaar  call delete('Xtest2')
17142093c0eSBram Moolenaar  windo bw!
17242093c0eSBram Moolenaarendfunc
17342093c0eSBram Moolenaar
17442093c0eSBram Moolenaarfunc Test_filler_lines()
17542093c0eSBram Moolenaar  " Test that diffing shows correct filler lines
17642093c0eSBram Moolenaar  enew!
17742093c0eSBram Moolenaar  put =range(4,10)
17842093c0eSBram Moolenaar  1d _
17942093c0eSBram Moolenaar  vnew
18042093c0eSBram Moolenaar  put =range(1,10)
18142093c0eSBram Moolenaar  1d _
18242093c0eSBram Moolenaar  windo diffthis
18342093c0eSBram Moolenaar  wincmd h
18442093c0eSBram Moolenaar  call assert_equal(1, line('w0'))
18542093c0eSBram Moolenaar  unlet! diff_fdm diff_fdc
18690d121faSBram Moolenaar  windo diffoff
18790d121faSBram Moolenaar  bwipe!
18890d121faSBram Moolenaar  enew!
18990d121faSBram Moolenaarendfunc
19042093c0eSBram Moolenaar
19190d121faSBram Moolenaarfunc Test_diffget_diffput()
19290d121faSBram Moolenaar  enew!
19390d121faSBram Moolenaar  let l = range(50)
19490d121faSBram Moolenaar  call setline(1, l)
19590d121faSBram Moolenaar  call assert_fails('diffget', 'E99:')
19690d121faSBram Moolenaar  diffthis
19790d121faSBram Moolenaar  call assert_fails('diffget', 'E100:')
19890d121faSBram Moolenaar  new
19990d121faSBram Moolenaar  let l[10] = 'one'
20090d121faSBram Moolenaar  let l[20] = 'two'
20190d121faSBram Moolenaar  let l[30] = 'three'
20290d121faSBram Moolenaar  let l[40] = 'four'
20390d121faSBram Moolenaar  call setline(1, l)
20490d121faSBram Moolenaar  diffthis
20590d121faSBram Moolenaar  call assert_equal('one', getline(11))
20690d121faSBram Moolenaar  11diffget
20790d121faSBram Moolenaar  call assert_equal('10', getline(11))
20890d121faSBram Moolenaar  21diffput
20990d121faSBram Moolenaar  wincmd w
21090d121faSBram Moolenaar  call assert_equal('two', getline(21))
21190d121faSBram Moolenaar  normal 31Gdo
21290d121faSBram Moolenaar  call assert_equal('three', getline(31))
21390d121faSBram Moolenaar  call assert_equal('40', getline(41))
21490d121faSBram Moolenaar  normal 41Gdp
21590d121faSBram Moolenaar  wincmd w
21690d121faSBram Moolenaar  call assert_equal('40', getline(41))
21790d121faSBram Moolenaar  new
21890d121faSBram Moolenaar  diffthis
21990d121faSBram Moolenaar  call assert_fails('diffget', 'E101:')
22090d121faSBram Moolenaar
22190d121faSBram Moolenaar  windo diffoff
22279a213d6SBram Moolenaar  %bwipe!
22379a213d6SBram Moolenaarendfunc
22479a213d6SBram Moolenaar
2255f57bdcaSBram Moolenaar" Test putting two changes from one buffer to another
2265f57bdcaSBram Moolenaarfunc Test_diffput_two()
2275f57bdcaSBram Moolenaar  new a
2285f57bdcaSBram Moolenaar  let win_a = win_getid()
2295f57bdcaSBram Moolenaar  call setline(1, range(1, 10))
2305f57bdcaSBram Moolenaar  diffthis
2315f57bdcaSBram Moolenaar  new b
2325f57bdcaSBram Moolenaar  let win_b = win_getid()
2335f57bdcaSBram Moolenaar  call setline(1, range(1, 10))
2345f57bdcaSBram Moolenaar  8del
2355f57bdcaSBram Moolenaar  5del
2365f57bdcaSBram Moolenaar  diffthis
2375f57bdcaSBram Moolenaar  call win_gotoid(win_a)
2385f57bdcaSBram Moolenaar  %diffput
2395f57bdcaSBram Moolenaar  call win_gotoid(win_b)
2405f57bdcaSBram Moolenaar  call assert_equal(map(range(1, 10), 'string(v:val)'), getline(1, '$'))
2415f57bdcaSBram Moolenaar  bwipe! a
2425f57bdcaSBram Moolenaar  bwipe! b
2435f57bdcaSBram Moolenaarendfunc
2445f57bdcaSBram Moolenaar
245ae7dba89SBram Moolenaar" :diffput and :diffget completes names of buffers which
246ae7dba89SBram Moolenaar" are in diff mode and which are different then current buffer.
247efcc3290SBram Moolenaar" No completion when the current window is not in diff mode.
248efcc3290SBram Moolenaarfunc Test_diffget_diffput_completion()
249efcc3290SBram Moolenaar  e            Xdiff1 | diffthis
250efcc3290SBram Moolenaar  botright new Xdiff2
251efcc3290SBram Moolenaar  botright new Xdiff3 | split | diffthis
252efcc3290SBram Moolenaar  botright new Xdiff4 | diffthis
253ae7dba89SBram Moolenaar
254efcc3290SBram Moolenaar  wincmd t
255efcc3290SBram Moolenaar  call assert_equal('Xdiff1', bufname('%'))
256ae7dba89SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
257efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff3 Xdiff4', @:)
258ae7dba89SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
259efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff3 Xdiff4', @:)
260efcc3290SBram Moolenaar  call assert_equal(['Xdiff3', 'Xdiff4'], getcompletion('', 'diff_buffer'))
261ae7dba89SBram Moolenaar
262efcc3290SBram Moolenaar  " Xdiff2 is not in diff mode, so no completion for :diffput, :diffget
263efcc3290SBram Moolenaar  wincmd j
264efcc3290SBram Moolenaar  call assert_equal('Xdiff2', bufname('%'))
265ae7dba89SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
266ae7dba89SBram Moolenaar  call assert_equal('"diffput ', @:)
267ae7dba89SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
268ae7dba89SBram Moolenaar  call assert_equal('"diffget ', @:)
269ae7dba89SBram Moolenaar  call assert_equal([], getcompletion('', 'diff_buffer'))
270ae7dba89SBram Moolenaar
271efcc3290SBram Moolenaar  " Xdiff3 is split in 2 windows, only the top one is in diff mode.
272efcc3290SBram Moolenaar  " So completion of :diffput :diffget only happens in the top window.
273efcc3290SBram Moolenaar  wincmd j
274efcc3290SBram Moolenaar  call assert_equal('Xdiff3', bufname('%'))
275efcc3290SBram Moolenaar  call assert_equal(1, &diff)
276efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
277efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff1 Xdiff4', @:)
278efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
279efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff1 Xdiff4', @:)
280efcc3290SBram Moolenaar  call assert_equal(['Xdiff1', 'Xdiff4'], getcompletion('', 'diff_buffer'))
281efcc3290SBram Moolenaar
282efcc3290SBram Moolenaar  wincmd j
283efcc3290SBram Moolenaar  call assert_equal('Xdiff3', bufname('%'))
284efcc3290SBram Moolenaar  call assert_equal(0, &diff)
285efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
286efcc3290SBram Moolenaar  call assert_equal('"diffput ', @:)
287efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
288efcc3290SBram Moolenaar  call assert_equal('"diffget ', @:)
289efcc3290SBram Moolenaar  call assert_equal([], getcompletion('', 'diff_buffer'))
290efcc3290SBram Moolenaar
291efcc3290SBram Moolenaar  wincmd j
292efcc3290SBram Moolenaar  call assert_equal('Xdiff4', bufname('%'))
293efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
294efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff1 Xdiff3', @:)
295efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
296efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff1 Xdiff3', @:)
297efcc3290SBram Moolenaar  call assert_equal(['Xdiff1', 'Xdiff3'], getcompletion('', 'diff_buffer'))
298efcc3290SBram Moolenaar
299ae7dba89SBram Moolenaar  %bwipe
300ae7dba89SBram Moolenaarendfunc
301ae7dba89SBram Moolenaar
30279a213d6SBram Moolenaarfunc Test_dp_do_buffer()
30379a213d6SBram Moolenaar  e! one
30479a213d6SBram Moolenaar  let bn1=bufnr('%')
30579a213d6SBram Moolenaar  let l = range(60)
30679a213d6SBram Moolenaar  call setline(1, l)
30779a213d6SBram Moolenaar  diffthis
30879a213d6SBram Moolenaar
30979a213d6SBram Moolenaar  new two
31079a213d6SBram Moolenaar  let l[10] = 'one'
31179a213d6SBram Moolenaar  let l[20] = 'two'
31279a213d6SBram Moolenaar  let l[30] = 'three'
31379a213d6SBram Moolenaar  let l[40] = 'four'
31479a213d6SBram Moolenaar  let l[50] = 'five'
31579a213d6SBram Moolenaar  call setline(1, l)
31679a213d6SBram Moolenaar  diffthis
31779a213d6SBram Moolenaar
31879a213d6SBram Moolenaar  " dp and do with invalid buffer number.
31979a213d6SBram Moolenaar  11
32079a213d6SBram Moolenaar  call assert_fails('norm 99999dp', 'E102:')
32179a213d6SBram Moolenaar  call assert_fails('norm 99999do', 'E102:')
32279a213d6SBram Moolenaar  call assert_fails('diffput non_existing_buffer', 'E94:')
32379a213d6SBram Moolenaar  call assert_fails('diffget non_existing_buffer', 'E94:')
32479a213d6SBram Moolenaar
32579a213d6SBram Moolenaar  " dp and do with valid buffer number.
32679a213d6SBram Moolenaar  call assert_equal('one', getline('.'))
32779a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'do'
32879a213d6SBram Moolenaar  call assert_equal('10', getline('.'))
32979a213d6SBram Moolenaar  21
33079a213d6SBram Moolenaar  call assert_equal('two', getline('.'))
33179a213d6SBram Moolenaar  diffget one
33279a213d6SBram Moolenaar  call assert_equal('20', getline('.'))
33379a213d6SBram Moolenaar
33479a213d6SBram Moolenaar  31
33579a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'dp'
33679a213d6SBram Moolenaar  41
33779a213d6SBram Moolenaar  diffput one
33879a213d6SBram Moolenaar  wincmd w
33979a213d6SBram Moolenaar  31
34079a213d6SBram Moolenaar  call assert_equal('three', getline('.'))
34179a213d6SBram Moolenaar  41
34279a213d6SBram Moolenaar  call assert_equal('four', getline('.'))
34379a213d6SBram Moolenaar
34479a213d6SBram Moolenaar  " dp and do with buffer number which is not in diff mode.
34579a213d6SBram Moolenaar  new not_in_diff_mode
34679a213d6SBram Moolenaar  let bn3=bufnr('%')
34779a213d6SBram Moolenaar  wincmd w
34879a213d6SBram Moolenaar  51
34979a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
35079a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
35179a213d6SBram Moolenaar  call assert_fails('diffput not_in_diff_mode', 'E94:')
35279a213d6SBram Moolenaar  call assert_fails('diffget not_in_diff_mode', 'E94:')
35379a213d6SBram Moolenaar
35479a213d6SBram Moolenaar  windo diffoff
35579a213d6SBram Moolenaar  %bwipe!
35642093c0eSBram Moolenaarendfunc
357e67d546fSBram Moolenaar
358df77cef9SBram Moolenaarfunc Test_do_lastline()
359df77cef9SBram Moolenaar  e! one
360df77cef9SBram Moolenaar  call setline(1, ['1','2','3','4','5','6'])
361df77cef9SBram Moolenaar  diffthis
362df77cef9SBram Moolenaar
363df77cef9SBram Moolenaar  new two
364df77cef9SBram Moolenaar  call setline(1, ['2','4','5'])
365df77cef9SBram Moolenaar  diffthis
366df77cef9SBram Moolenaar
367df77cef9SBram Moolenaar  1
368df77cef9SBram Moolenaar  norm dp]c
369df77cef9SBram Moolenaar  norm dp]c
370df77cef9SBram Moolenaar  wincmd w
371df77cef9SBram Moolenaar  call assert_equal(4, line('$'))
372df77cef9SBram Moolenaar  norm G
373df77cef9SBram Moolenaar  norm do
374df77cef9SBram Moolenaar  call assert_equal(3, line('$'))
375df77cef9SBram Moolenaar
376df77cef9SBram Moolenaar  windo diffoff
377df77cef9SBram Moolenaar  %bwipe!
378df77cef9SBram Moolenaarendfunc
379df77cef9SBram Moolenaar
380e67d546fSBram Moolenaarfunc Test_diffoff()
381e67d546fSBram Moolenaar  enew!
382e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
38379a213d6SBram Moolenaar  redraw
384e67d546fSBram Moolenaar  let normattr = screenattr(1, 1)
385e67d546fSBram Moolenaar  diffthis
386e67d546fSBram Moolenaar  botright vert new
387e67d546fSBram Moolenaar  call setline(1, ['One', '', 'Two', 'Three'])
388e67d546fSBram Moolenaar  diffthis
389e67d546fSBram Moolenaar  redraw
390196b4664SBram Moolenaar  call assert_notequal(normattr, 1->screenattr(1))
391e67d546fSBram Moolenaar  diffoff!
392e67d546fSBram Moolenaar  redraw
393e67d546fSBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
394e67d546fSBram Moolenaar  bwipe!
395e67d546fSBram Moolenaar  bwipe!
396e67d546fSBram Moolenaarendfunc
397025e3e0bSBram Moolenaar
398e828b762SBram Moolenaarfunc Common_icase_test()
399e828b762SBram Moolenaar  edit one
400da22b8ccSBram Moolenaar  call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
40179a213d6SBram Moolenaar  redraw
40279a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
40379a213d6SBram Moolenaar  diffthis
40479a213d6SBram Moolenaar
40579a213d6SBram Moolenaar  botright vert new two
406da22b8ccSBram Moolenaar  call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE'])
40779a213d6SBram Moolenaar  diffthis
40879a213d6SBram Moolenaar
40979a213d6SBram Moolenaar  redraw
41079a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
41179a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
41279a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
41379a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
41479a213d6SBram Moolenaar
415da22b8ccSBram Moolenaar  let dtextattr = screenattr(5, 3)
416da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 1))
417da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 5))
418da22b8ccSBram Moolenaar
41979a213d6SBram Moolenaar  diffoff!
42079a213d6SBram Moolenaar  %bwipe!
421e828b762SBram Moolenaarendfunc
422e828b762SBram Moolenaar
423e828b762SBram Moolenaarfunc Test_diffopt_icase()
424e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0
425e828b762SBram Moolenaar  call Common_icase_test()
42679a213d6SBram Moolenaar  set diffopt&
42779a213d6SBram Moolenaarendfunc
42879a213d6SBram Moolenaar
429e828b762SBram Moolenaarfunc Test_diffopt_icase_internal()
430e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0,internal
431e828b762SBram Moolenaar  call Common_icase_test()
432e828b762SBram Moolenaar  set diffopt&
433e828b762SBram Moolenaarendfunc
43479a213d6SBram Moolenaar
435e828b762SBram Moolenaarfunc Common_iwhite_test()
436e828b762SBram Moolenaar  edit one
437e828b762SBram Moolenaar  " Difference in trailing spaces and amount of spaces should be ignored,
43879a213d6SBram Moolenaar  " but not other space differences.
439e828b762SBram Moolenaar  call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four'])
44079a213d6SBram Moolenaar  redraw
44179a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
44279a213d6SBram Moolenaar  diffthis
44379a213d6SBram Moolenaar
44479a213d6SBram Moolenaar  botright vert new two
445e828b762SBram Moolenaar  call setline(1, ["One\t ", "Two\t ", 'Three', 'one   two', 'onetwo', ' Four'])
44679a213d6SBram Moolenaar  diffthis
44779a213d6SBram Moolenaar
44879a213d6SBram Moolenaar  redraw
44979a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
45079a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
45179a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(3, 1))
452e828b762SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
453e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(5, 1))
454e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(6, 1))
45579a213d6SBram Moolenaar
45679a213d6SBram Moolenaar  diffoff!
45779a213d6SBram Moolenaar  %bwipe!
458e828b762SBram Moolenaarendfunc
459e828b762SBram Moolenaar
460e828b762SBram Moolenaarfunc Test_diffopt_iwhite()
461e828b762SBram Moolenaar  set diffopt=iwhite,foldcolumn:0
462e828b762SBram Moolenaar  call Common_iwhite_test()
463e828b762SBram Moolenaar  set diffopt&
464e828b762SBram Moolenaarendfunc
465e828b762SBram Moolenaar
466e828b762SBram Moolenaarfunc Test_diffopt_iwhite_internal()
467e828b762SBram Moolenaar  set diffopt=internal,iwhite,foldcolumn:0
468e828b762SBram Moolenaar  call Common_iwhite_test()
46979a213d6SBram Moolenaar  set diffopt&
47079a213d6SBram Moolenaarendfunc
47179a213d6SBram Moolenaar
47279a213d6SBram Moolenaarfunc Test_diffopt_context()
47379a213d6SBram Moolenaar  enew!
47479a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
47579a213d6SBram Moolenaar  diffthis
47679a213d6SBram Moolenaar  new
47779a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
47879a213d6SBram Moolenaar  diffthis
47979a213d6SBram Moolenaar
48079a213d6SBram Moolenaar  set diffopt=context:2
48179a213d6SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
482e828b762SBram Moolenaar  set diffopt=internal,context:2
483e828b762SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
484e828b762SBram Moolenaar
48579a213d6SBram Moolenaar  set diffopt=context:1
48679a213d6SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
487e828b762SBram Moolenaar  set diffopt=internal,context:1
488e828b762SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
48979a213d6SBram Moolenaar
49079a213d6SBram Moolenaar  diffoff!
49179a213d6SBram Moolenaar  %bwipe!
49279a213d6SBram Moolenaar  set diffopt&
49379a213d6SBram Moolenaarendfunc
49479a213d6SBram Moolenaar
49579a213d6SBram Moolenaarfunc Test_diffopt_horizontal()
496e828b762SBram Moolenaar  set diffopt=internal,horizontal
49779a213d6SBram Moolenaar  diffsplit
49879a213d6SBram Moolenaar
49979a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1))
50079a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(2))
50179a213d6SBram Moolenaar  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
50279a213d6SBram Moolenaar  call assert_inrange(0, 1, winheight(1) - winheight(2))
50379a213d6SBram Moolenaar
50479a213d6SBram Moolenaar  set diffopt&
50579a213d6SBram Moolenaar  diffoff!
50679a213d6SBram Moolenaar  %bwipe
50779a213d6SBram Moolenaarendfunc
50879a213d6SBram Moolenaar
50979a213d6SBram Moolenaarfunc Test_diffopt_vertical()
510e828b762SBram Moolenaar  set diffopt=internal,vertical
51179a213d6SBram Moolenaar  diffsplit
51279a213d6SBram Moolenaar
51379a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(1))
51479a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(2))
51579a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
51679a213d6SBram Moolenaar  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
51779a213d6SBram Moolenaar
51879a213d6SBram Moolenaar  set diffopt&
51979a213d6SBram Moolenaar  diffoff!
52079a213d6SBram Moolenaar  %bwipe
52179a213d6SBram Moolenaarendfunc
52279a213d6SBram Moolenaar
52397ce4192SBram Moolenaarfunc Test_diffopt_hiddenoff()
524e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0,hiddenoff
52597ce4192SBram Moolenaar  e! one
52697ce4192SBram Moolenaar  call setline(1, ['Two', 'Three'])
52797ce4192SBram Moolenaar  redraw
52897ce4192SBram Moolenaar  let normattr = screenattr(1, 1)
52997ce4192SBram Moolenaar  diffthis
53097ce4192SBram Moolenaar  botright vert new two
53197ce4192SBram Moolenaar  call setline(1, ['One', 'Four'])
53297ce4192SBram Moolenaar  diffthis
53397ce4192SBram Moolenaar  redraw
53497ce4192SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
53597ce4192SBram Moolenaar  set hidden
53697ce4192SBram Moolenaar  close
53797ce4192SBram Moolenaar  redraw
53897ce4192SBram Moolenaar  " should not diffing with hidden buffer two while 'hiddenoff' is enabled
53997ce4192SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
54097ce4192SBram Moolenaar
54197ce4192SBram Moolenaar  bwipe!
54297ce4192SBram Moolenaar  bwipe!
54397ce4192SBram Moolenaar  set hidden& diffopt&
54497ce4192SBram Moolenaarendfunc
54597ce4192SBram Moolenaar
54625ea0544SBram Moolenaarfunc Test_diffoff_hidden()
547e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0
54825ea0544SBram Moolenaar  e! one
54925ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
55079a213d6SBram Moolenaar  redraw
55125ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
55225ea0544SBram Moolenaar  diffthis
55325ea0544SBram Moolenaar  botright vert new two
55425ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
55525ea0544SBram Moolenaar  diffthis
55625ea0544SBram Moolenaar  redraw
55725ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
55825ea0544SBram Moolenaar  set hidden
55925ea0544SBram Moolenaar  close
56025ea0544SBram Moolenaar  redraw
56125ea0544SBram Moolenaar  " diffing with hidden buffer two
56225ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
56325ea0544SBram Moolenaar  diffoff
56425ea0544SBram Moolenaar  redraw
56525ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
56625ea0544SBram Moolenaar  diffthis
56725ea0544SBram Moolenaar  redraw
56825ea0544SBram Moolenaar  " still diffing with hidden buffer two
56925ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
57025ea0544SBram Moolenaar  diffoff!
57125ea0544SBram Moolenaar  redraw
57225ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
57325ea0544SBram Moolenaar  diffthis
57425ea0544SBram Moolenaar  redraw
57525ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
57625ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
57725ea0544SBram Moolenaar
57825ea0544SBram Moolenaar  bwipe!
57925ea0544SBram Moolenaar  bwipe!
58025ea0544SBram Moolenaar  set hidden& diffopt&
58125ea0544SBram Moolenaarendfunc
58225ea0544SBram Moolenaar
583025e3e0bSBram Moolenaarfunc Test_setting_cursor()
584025e3e0bSBram Moolenaar  new Xtest1
585025e3e0bSBram Moolenaar  put =range(1,90)
586025e3e0bSBram Moolenaar  wq
587025e3e0bSBram Moolenaar  new Xtest2
588025e3e0bSBram Moolenaar  put =range(1,100)
589025e3e0bSBram Moolenaar  wq
590025e3e0bSBram Moolenaar
591025e3e0bSBram Moolenaar  tabe Xtest2
592025e3e0bSBram Moolenaar  $
593025e3e0bSBram Moolenaar  diffsp Xtest1
594025e3e0bSBram Moolenaar  tabclose
595025e3e0bSBram Moolenaar
596025e3e0bSBram Moolenaar  call delete('Xtest1')
597025e3e0bSBram Moolenaar  call delete('Xtest2')
598025e3e0bSBram Moolenaarendfunc
599aeb661e1SBram Moolenaar
600aeb661e1SBram Moolenaarfunc Test_diff_move_to()
601aeb661e1SBram Moolenaar  new
602aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
603aeb661e1SBram Moolenaar  diffthis
604aeb661e1SBram Moolenaar  vnew
605aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
606aeb661e1SBram Moolenaar  diffthis
607aeb661e1SBram Moolenaar  norm ]c
608aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
609aeb661e1SBram Moolenaar  norm 3]c
610aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
611aeb661e1SBram Moolenaar  norm 10]c
612aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
613aeb661e1SBram Moolenaar  norm [c
614aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
615aeb661e1SBram Moolenaar  norm 2[c
616aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
617aeb661e1SBram Moolenaar  norm 10[c
618aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
619aeb661e1SBram Moolenaar  %bwipe!
620aeb661e1SBram Moolenaarendfunc
621aeb661e1SBram Moolenaar
62279a213d6SBram Moolenaarfunc Test_diffexpr()
62379a213d6SBram Moolenaar  if !executable('diff')
62479a213d6SBram Moolenaar    return
62579a213d6SBram Moolenaar  endif
62679a213d6SBram Moolenaar
62779a213d6SBram Moolenaar  func DiffExpr()
6283b8defd0SBram Moolenaar    " Prepent some text to check diff type detection
6293b8defd0SBram Moolenaar    call writefile(['warning', '  message'], v:fname_out)
6303b8defd0SBram Moolenaar    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>>' . v:fname_out
63179a213d6SBram Moolenaar  endfunc
63279a213d6SBram Moolenaar  set diffexpr=DiffExpr()
63379a213d6SBram Moolenaar  set diffopt=foldcolumn:0
63479a213d6SBram Moolenaar
63579a213d6SBram Moolenaar  enew!
63679a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
63779a213d6SBram Moolenaar  redraw
63879a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
63979a213d6SBram Moolenaar  diffthis
64079a213d6SBram Moolenaar
64179a213d6SBram Moolenaar  botright vert new
64279a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three.'])
64379a213d6SBram Moolenaar  diffthis
64479a213d6SBram Moolenaar
64579a213d6SBram Moolenaar  redraw
64679a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
64779a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
64879a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
64979a213d6SBram Moolenaar
65079a213d6SBram Moolenaar  diffoff!
65179a213d6SBram Moolenaar  %bwipe!
65279a213d6SBram Moolenaar  set diffexpr& diffopt&
65379a213d6SBram Moolenaarendfunc
65479a213d6SBram Moolenaar
655aeb661e1SBram Moolenaarfunc Test_diffpatch()
656aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
657aeb661e1SBram Moolenaar  if !executable('patch') || !has('unix')
658aeb661e1SBram Moolenaar    return
659aeb661e1SBram Moolenaar  endif
660aeb661e1SBram Moolenaar  new
661aeb661e1SBram Moolenaar  insert
662aeb661e1SBram Moolenaar***************
663aeb661e1SBram Moolenaar*** 1,3 ****
664aeb661e1SBram Moolenaar  1
665aeb661e1SBram Moolenaar! 2
666aeb661e1SBram Moolenaar  3
667aeb661e1SBram Moolenaar--- 1,4 ----
668aeb661e1SBram Moolenaar  1
669aeb661e1SBram Moolenaar! 2x
670aeb661e1SBram Moolenaar  3
671aeb661e1SBram Moolenaar+ 4
672aeb661e1SBram Moolenaar.
67397fbc404SBram Moolenaar  saveas! Xpatch
674aeb661e1SBram Moolenaar  bwipe!
675aeb661e1SBram Moolenaar  new
676aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
6771ef73e33SBram Moolenaar
678a95ab321SBram Moolenaar  for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch']
679aeb661e1SBram Moolenaar    call setline(1, ['1', '2', '3'])
6801ef73e33SBram Moolenaar    if name != 'Xpatch'
6811ef73e33SBram Moolenaar      call rename('Xpatch', name)
6821ef73e33SBram Moolenaar    endif
6831ef73e33SBram Moolenaar    exe 'diffpatch ' . escape(name, '$')
684aeb661e1SBram Moolenaar    call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
6851ef73e33SBram Moolenaar    if name != 'Xpatch'
6861ef73e33SBram Moolenaar      call rename(name, 'Xpatch')
6871ef73e33SBram Moolenaar    endif
6881ef73e33SBram Moolenaar    bwipe!
6891ef73e33SBram Moolenaar  endfor
6901ef73e33SBram Moolenaar
691aeb661e1SBram Moolenaar  call delete('Xpatch')
692aeb661e1SBram Moolenaar  bwipe!
693aeb661e1SBram Moolenaarendfunc
694aeb661e1SBram Moolenaar
695aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
696aeb661e1SBram Moolenaar  for i in range(1, 8)
697aeb661e1SBram Moolenaar    exe "new Xtest" . i
698aeb661e1SBram Moolenaar    diffthis
699aeb661e1SBram Moolenaar  endfor
700aeb661e1SBram Moolenaar  new Xtest9
701aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
702aeb661e1SBram Moolenaar  %bwipe!
703aeb661e1SBram Moolenaarendfunc
704aeb661e1SBram Moolenaar
705aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
706aeb661e1SBram Moolenaar  new
707aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
708aeb661e1SBram Moolenaar  setl nomodifiable
709aeb661e1SBram Moolenaar  diffthis
710aeb661e1SBram Moolenaar  vnew
711aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
712aeb661e1SBram Moolenaar  diffthis
713aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
714aeb661e1SBram Moolenaar  setl nomodifiable
715aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
716aeb661e1SBram Moolenaar  %bwipe!
717aeb661e1SBram Moolenaarendfunc
718f58a8475SBram Moolenaar
71997fbc404SBram Moolenaarfunc Test_diff_hlID()
72097fbc404SBram Moolenaar  new
72197fbc404SBram Moolenaar  call setline(1, [1, 2, 3])
72297fbc404SBram Moolenaar  diffthis
72397fbc404SBram Moolenaar  vnew
72497fbc404SBram Moolenaar  call setline(1, ['1x', 2, 'x', 3])
72597fbc404SBram Moolenaar  diffthis
72697fbc404SBram Moolenaar  redraw
72797fbc404SBram Moolenaar
728a74e4946SBram Moolenaar  call diff_hlID(-1, 1)->synIDattr("name")->assert_equal("")
72997fbc404SBram Moolenaar
730a74e4946SBram Moolenaar  call diff_hlID(1, 1)->synIDattr("name")->assert_equal("DiffChange")
731a74e4946SBram Moolenaar  call diff_hlID(1, 2)->synIDattr("name")->assert_equal("DiffText")
732a74e4946SBram Moolenaar  call diff_hlID(2, 1)->synIDattr("name")->assert_equal("")
733a74e4946SBram Moolenaar  call diff_hlID(3, 1)->synIDattr("name")->assert_equal("DiffAdd")
7341a3a8916SBram Moolenaar  eval 4->diff_hlID(1)->synIDattr("name")->assert_equal("")
73597fbc404SBram Moolenaar
73697fbc404SBram Moolenaar  wincmd w
73797fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
73897fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
73997fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "")
74097fbc404SBram Moolenaar
74197fbc404SBram Moolenaar  %bwipe!
74297fbc404SBram Moolenaarendfunc
74397fbc404SBram Moolenaar
74497fbc404SBram Moolenaarfunc Test_diff_filler()
74597fbc404SBram Moolenaar  new
74697fbc404SBram Moolenaar  call setline(1, [1, 2, 3, 'x', 4])
74797fbc404SBram Moolenaar  diffthis
74897fbc404SBram Moolenaar  vnew
74997fbc404SBram Moolenaar  call setline(1, [1, 2, 'y', 'y', 3, 4])
75097fbc404SBram Moolenaar  diffthis
75197fbc404SBram Moolenaar  redraw
75297fbc404SBram Moolenaar
7531a3a8916SBram Moolenaar  call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'v:val->diff_filler()'))
75497fbc404SBram Moolenaar  wincmd w
75597fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)'))
75697fbc404SBram Moolenaar
75797fbc404SBram Moolenaar  %bwipe!
75897fbc404SBram Moolenaarendfunc
75997fbc404SBram Moolenaar
760f58a8475SBram Moolenaarfunc Test_diff_lastline()
761f58a8475SBram Moolenaar  enew!
762f58a8475SBram Moolenaar  only!
763f58a8475SBram Moolenaar  call setline(1, ['This is a ', 'line with five ', 'rows'])
764f58a8475SBram Moolenaar  diffthis
765f58a8475SBram Moolenaar  botright vert new
766f58a8475SBram Moolenaar  call setline(1, ['This is', 'a line with ', 'four rows'])
767f58a8475SBram Moolenaar  diffthis
768f58a8475SBram Moolenaar  1
769f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
770f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
771f58a8475SBram Moolenaar  let w1lines = winline()
772f58a8475SBram Moolenaar  wincmd w
773f58a8475SBram Moolenaar  $
774f58a8475SBram Moolenaar  let w2lines = winline()
775f58a8475SBram Moolenaar  call assert_equal(w2lines, w1lines)
776f58a8475SBram Moolenaar  bwipe!
777f58a8475SBram Moolenaar  bwipe!
778f58a8475SBram Moolenaarendfunc
779e828b762SBram Moolenaar
780785fc656SBram Moolenaarfunc WriteDiffFiles(buf, list1, list2)
781e828b762SBram Moolenaar  call writefile(a:list1, 'Xfile1')
782e828b762SBram Moolenaar  call writefile(a:list2, 'Xfile2')
783785fc656SBram Moolenaar  if a:buf
784785fc656SBram Moolenaar    call term_sendkeys(a:buf, ":checktime\<CR>")
785785fc656SBram Moolenaar  endif
786e828b762SBram Moolenaarendfunc
787e828b762SBram Moolenaar
788785fc656SBram Moolenaar" Verify a screendump with both the internal and external diff.
789e828b762SBram Moolenaarfunc VerifyBoth(buf, dumpfile, extra)
790e828b762SBram Moolenaar  " trailing : for leaving the cursor on the command line
791785fc656SBram Moolenaar  for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"]
792e828b762SBram Moolenaar    call term_sendkeys(a:buf, cmd)
793e828b762SBram Moolenaar    if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
794e828b762SBram Moolenaar      break " don't let the next iteration overwrite the "failed" file.
795e828b762SBram Moolenaar    endif
796e828b762SBram Moolenaar  endfor
797e828b762SBram Moolenaarendfunc
798e828b762SBram Moolenaar
799785fc656SBram Moolenaar" Verify a screendump with the internal diff only.
800785fc656SBram Moolenaarfunc VerifyInternal(buf, dumpfile, extra)
801785fc656SBram Moolenaar  call term_sendkeys(a:buf, ":diffupdate!\<CR>")
802785fc656SBram Moolenaar  " trailing : for leaving the cursor on the command line
803785fc656SBram Moolenaar  call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:")
8046a2c5a7dSBram Moolenaar  call TermWait(a:buf)
805785fc656SBram Moolenaar  call VerifyScreenDump(a:buf, a:dumpfile, {})
806785fc656SBram Moolenaarendfunc
807785fc656SBram Moolenaar
808e828b762SBram Moolenaarfunc Test_diff_screen()
8093c8ee629SBram Moolenaar  CheckScreendump
8103c8ee629SBram Moolenaar  CheckFeature menu
8113c8ee629SBram Moolenaar
812e828b762SBram Moolenaar  " clean up already existing swap files, just in case
813e828b762SBram Moolenaar  call delete('.Xfile1.swp')
814e828b762SBram Moolenaar  call delete('.Xfile2.swp')
815e828b762SBram Moolenaar
816e828b762SBram Moolenaar  " Test 1: Add a line in beginning of file 2
817785fc656SBram 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])
818e828b762SBram Moolenaar  let buf = RunVimInTerminal('-d Xfile1 Xfile2', {})
8198ee4c01bSBram Moolenaar  " Set autoread mode, so that Vim won't complain once we re-write the test
820e828b762SBram Moolenaar  " files
821785fc656SBram Moolenaar  call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
822e828b762SBram Moolenaar
823e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_01', '')
824e828b762SBram Moolenaar
825e828b762SBram Moolenaar  " Test 2: Add a line in beginning of file 1
826785fc656SBram 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])
827e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_02', '')
828e828b762SBram Moolenaar
829e828b762SBram Moolenaar  " Test 3: Add a line at the end of file 2
830785fc656SBram 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])
831e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_03', '')
832e828b762SBram Moolenaar
833e828b762SBram Moolenaar  " Test 4: Add a line at the end of file 1
834785fc656SBram 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])
835e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_04', '')
836e828b762SBram Moolenaar
837e828b762SBram Moolenaar  " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
838785fc656SBram 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])
839e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_05', '')
840e828b762SBram Moolenaar
841e828b762SBram Moolenaar  " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
842785fc656SBram 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])
843e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_06', '')
844e828b762SBram Moolenaar
845b9ddda6cSBram Moolenaar  " Variants on test 6 with different context settings
846b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:2\<cr>")
847b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.2', {})
848b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:2\<cr>")
849b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:1\<cr>")
850b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.1', {})
851b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:1\<cr>")
852b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:0\<cr>")
853b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.0', {})
854b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:0\<cr>")
855b9ddda6cSBram Moolenaar
856e828b762SBram Moolenaar  " Test 7 - 9: Test normal/patience/histogram diff algorithm
857785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
858e828b762SBram Moolenaar      \ '    int i;', '    for(i = 0; i < 10; i++)', '    {', '        printf("Your answer is: ");',
859e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '', 'int fact(int n)', '{', '    if(n > 1)', '    {',
860e828b762SBram Moolenaar      \ '        return fact(n-1) * n;', '    }', '    return 1;', '}', '', 'int main(int argc, char **argv)',
861e828b762SBram Moolenaar      \ '{', '    frobnitz(fact(10));', '}'],
862e828b762SBram Moolenaar      \ ['#include <stdio.h>', '', 'int fib(int n)', '{', '    if(n > 2)', '    {',
863e828b762SBram Moolenaar      \ '        return fib(n-1) + fib(n-2);', '    }', '    return 1;', '}', '', '// Frobs foo heartily',
864e828b762SBram Moolenaar      \ 'int frobnitz(int foo)', '{', '    int i;', '    for(i = 0; i < 10; i++)', '    {',
865e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '',
866e828b762SBram Moolenaar      \ 'int main(int argc, char **argv)', '{', '    frobnitz(fib(10));', '}'])
867e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
868e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
869e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_07', {})
870e828b762SBram Moolenaar
871e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>")
872e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_08', {})
873e828b762SBram Moolenaar
874e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>")
875e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_09', {})
876e828b762SBram Moolenaar
877e828b762SBram Moolenaar  " Test 10-11: normal/indent-heuristic
878e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim\<cr>")
879785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['', '  def finalize(values)', '', '    values.each do |v|', '      v.finalize', '    end'],
880e828b762SBram Moolenaar      \ ['', '  def finalize(values)', '', '    values.each do |v|', '      v.prepare', '    end', '',
881e828b762SBram Moolenaar      \ '    values.each do |v|', '      v.finalize', '    end'])
882e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
883e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
884e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_10', {})
885e828b762SBram Moolenaar
886b6fc7285SBram Moolenaar  " Leave trailing : at commandline!
887b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>:\<cr>")
888b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'one')
889b6fc7285SBram Moolenaar  " shouldn't matter, if indent-algorithm comes before or after the algorithm
890b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&\<cr>")
891b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=indent-heuristic,algorithm:patience\<cr>:\<cr>")
892b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'two')
893b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&\<cr>")
894b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:patience,indent-heuristic\<cr>:\<cr>")
895b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'three')
896e828b762SBram Moolenaar
897e828b762SBram Moolenaar  " Test 12: diff the same file
898785fc656SBram Moolenaar  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
899e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_12', '')
900e828b762SBram Moolenaar
901e828b762SBram Moolenaar  " Test 13: diff an empty file
902785fc656SBram Moolenaar  call WriteDiffFiles(buf, [], [])
903e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_13', '')
904e828b762SBram Moolenaar
905e828b762SBram Moolenaar  " Test 14: test diffopt+=icase
906785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe'])
907e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
908e828b762SBram Moolenaar
909e828b762SBram Moolenaar  " Test 15-16: test diffopt+=iwhite
910785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['int main()', '{', '   printf("Hello, World!");', '   return 0;', '}'],
911e828b762SBram Moolenaar      \ ['int main()', '{', '   if (0)', '   {', '      printf("Hello, World!");', '      return 0;', '   }', '}'])
912e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
913e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
914e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_15', {})
915e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
916e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_16', {})
917e828b762SBram Moolenaar
918785fc656SBram Moolenaar  " Test 17: test diffopt+=iblank
919785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy'])
920785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank")
921785fc656SBram Moolenaar
922785fc656SBram Moolenaar  " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol
923785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite")
924785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall")
925785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol")
926785fc656SBram Moolenaar
927785fc656SBram Moolenaar  " Test 19: test diffopt+=iwhiteeol
928785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx  xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar'])
929785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol")
930785fc656SBram Moolenaar
931785fc656SBram Moolenaar  " Test 19: test diffopt+=iwhiteall
932785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall")
933785fc656SBram Moolenaar
934e828b762SBram Moolenaar  " clean up
935e828b762SBram Moolenaar  call StopVimInTerminal(buf)
936e828b762SBram Moolenaar  call delete('Xfile1')
937e828b762SBram Moolenaar  call delete('Xfile2')
938e828b762SBram Moolenaarendfunc
939e828b762SBram Moolenaar
9404a5abbd6SBram Moolenaarfunc Test_diff_with_cursorline()
9413c8ee629SBram Moolenaar  CheckScreendump
9424a5abbd6SBram Moolenaar
9434a5abbd6SBram Moolenaar  call writefile([
9444a5abbd6SBram Moolenaar	\ 'hi CursorLine ctermbg=red ctermfg=white',
9454a5abbd6SBram Moolenaar	\ 'set cursorline',
9464a5abbd6SBram Moolenaar	\ 'call setline(1, ["foo","foo","foo","bar"])',
9474a5abbd6SBram Moolenaar	\ 'vnew',
9484a5abbd6SBram Moolenaar	\ 'call setline(1, ["bee","foo","foo","baz"])',
9494a5abbd6SBram Moolenaar	\ 'windo diffthis',
9504a5abbd6SBram Moolenaar	\ '2wincmd w',
9514a5abbd6SBram Moolenaar	\ ], 'Xtest_diff_cursorline')
9524a5abbd6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {})
9534a5abbd6SBram Moolenaar
9544a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {})
9554a5abbd6SBram Moolenaar  call term_sendkeys(buf, "j")
9564a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {})
9574a5abbd6SBram Moolenaar  call term_sendkeys(buf, "j")
9584a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {})
9594a5abbd6SBram Moolenaar
9604a5abbd6SBram Moolenaar  " clean up
9614a5abbd6SBram Moolenaar  call StopVimInTerminal(buf)
9624a5abbd6SBram Moolenaar  call delete('Xtest_diff_cursorline')
9634a5abbd6SBram Moolenaarendfunc
964f7acf2b6SBram Moolenaar
965248fdb33SBram Moolenaarfunc Test_diff_with_syntax()
966248fdb33SBram Moolenaar  CheckScreendump
967248fdb33SBram Moolenaar
968248fdb33SBram Moolenaar  let lines =<< trim END
969248fdb33SBram Moolenaar  	void doNothing() {
970248fdb33SBram Moolenaar	   int x = 0;
971248fdb33SBram Moolenaar	   char *s = "hello";
972248fdb33SBram Moolenaar	   return 5;
973248fdb33SBram Moolenaar	}
974248fdb33SBram Moolenaar  END
975248fdb33SBram Moolenaar  call writefile(lines, 'Xprogram1.c')
976248fdb33SBram Moolenaar  let lines =<< trim END
977248fdb33SBram Moolenaar  	void doSomething() {
978248fdb33SBram Moolenaar	   int x = 0;
979248fdb33SBram Moolenaar	   char *s = "there";
980248fdb33SBram Moolenaar	   return 5;
981248fdb33SBram Moolenaar	}
982248fdb33SBram Moolenaar  END
983248fdb33SBram Moolenaar  call writefile(lines, 'Xprogram2.c')
984248fdb33SBram Moolenaar
985248fdb33SBram Moolenaar  let lines =<< trim END
986248fdb33SBram Moolenaar  	edit Xprogram1.c
987248fdb33SBram Moolenaar	diffsplit Xprogram2.c
988248fdb33SBram Moolenaar  END
989248fdb33SBram Moolenaar  call writefile(lines, 'Xtest_diff_syntax')
990248fdb33SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_syntax', {})
991248fdb33SBram Moolenaar
992248fdb33SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_syntax_1', {})
993248fdb33SBram Moolenaar
994248fdb33SBram Moolenaar  " clean up
995248fdb33SBram Moolenaar  call StopVimInTerminal(buf)
996248fdb33SBram Moolenaar  call delete('Xtest_diff_syntax')
997248fdb33SBram Moolenaar  call delete('Xprogram1.c')
998248fdb33SBram Moolenaar  call delete('Xprogram2.c')
999248fdb33SBram Moolenaarendfunc
1000248fdb33SBram Moolenaar
1001f7acf2b6SBram Moolenaarfunc Test_diff_of_diff()
10023c8ee629SBram Moolenaar  CheckScreendump
10033c8ee629SBram Moolenaar  CheckFeature rightleft
1004f7acf2b6SBram Moolenaar
1005f7acf2b6SBram Moolenaar  call writefile([
1006f7acf2b6SBram Moolenaar	\ 'call setline(1, ["aa","bb","cc","@@ -3,2 +5,7 @@","dd","ee","ff"])',
1007f7acf2b6SBram Moolenaar	\ 'vnew',
1008f7acf2b6SBram Moolenaar	\ 'call setline(1, ["aa","bb","cc"])',
1009f7acf2b6SBram Moolenaar	\ 'windo diffthis',
10108ee4c01bSBram Moolenaar	\ '1wincmd w',
10118ee4c01bSBram Moolenaar	\ 'setlocal number',
1012f7acf2b6SBram Moolenaar	\ ], 'Xtest_diff_diff')
1013f7acf2b6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_diff', {})
1014f7acf2b6SBram Moolenaar
1015f7acf2b6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_of_diff_01', {})
1016f7acf2b6SBram Moolenaar
1017e73f911cSBram Moolenaar  call term_sendkeys(buf, ":set rightleft\<cr>")
1018e73f911cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_of_diff_02', {})
1019e73f911cSBram Moolenaar
1020f7acf2b6SBram Moolenaar  " clean up
1021f7acf2b6SBram Moolenaar  call StopVimInTerminal(buf)
1022f7acf2b6SBram Moolenaar  call delete('Xtest_diff_diff')
1023f7acf2b6SBram Moolenaarendfunc
1024c8234779SBram Moolenaar
1025c8234779SBram Moolenaarfunc CloseoffSetup()
1026c8234779SBram Moolenaar  enew
1027c8234779SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
1028c8234779SBram Moolenaar  diffthis
1029c8234779SBram Moolenaar  new
1030c8234779SBram Moolenaar  call setline(1, ['one', 'tow', 'three'])
1031c8234779SBram Moolenaar  diffthis
1032c8234779SBram Moolenaar  call assert_equal(1, &diff)
1033c8234779SBram Moolenaar  only!
1034c8234779SBram Moolenaarendfunc
1035c8234779SBram Moolenaar
1036c8234779SBram Moolenaarfunc Test_diff_closeoff()
1037c8234779SBram Moolenaar  " "closeoff" included by default: last diff win gets 'diff' reset'
1038c8234779SBram Moolenaar  call CloseoffSetup()
1039c8234779SBram Moolenaar  call assert_equal(0, &diff)
1040c8234779SBram Moolenaar  enew!
1041c8234779SBram Moolenaar
1042c8234779SBram Moolenaar  " "closeoff" excluded: last diff win keeps 'diff' set'
1043c8234779SBram Moolenaar  set diffopt-=closeoff
1044c8234779SBram Moolenaar  call CloseoffSetup()
1045c8234779SBram Moolenaar  call assert_equal(1, &diff)
1046c8234779SBram Moolenaar  diffoff!
1047c8234779SBram Moolenaar  enew!
1048c8234779SBram Moolenaarendfunc
1049f4a1d1c0SBram Moolenaar
1050f4a1d1c0SBram Moolenaarfunc Test_diff_maintains_change_mark()
1051f4a1d1c0SBram Moolenaar  enew!
1052f4a1d1c0SBram Moolenaar  call setline(1, ['a', 'b', 'c', 'd'])
1053f4a1d1c0SBram Moolenaar  diffthis
1054f4a1d1c0SBram Moolenaar  new
1055f4a1d1c0SBram Moolenaar  call setline(1, ['a', 'b', 'c', 'e'])
1056f4a1d1c0SBram Moolenaar  " Set '[ and '] marks
1057f4a1d1c0SBram Moolenaar  2,3yank
1058f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1059f4a1d1c0SBram Moolenaar  " Verify they aren't affected by the implicit diff
1060f4a1d1c0SBram Moolenaar  diffthis
1061f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1062f4a1d1c0SBram Moolenaar  " Verify they aren't affected by an explicit diff
1063f4a1d1c0SBram Moolenaar  diffupdate
1064f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1065f4a1d1c0SBram Moolenaar  bwipe!
1066f4a1d1c0SBram Moolenaar  bwipe!
1067f4a1d1c0SBram Moolenaarendfunc
10688dfcce3aSBram Moolenaar
10698dfcce3aSBram Moolenaar" Test for 'patchexpr'
10708dfcce3aSBram Moolenaarfunc Test_patchexpr()
10718dfcce3aSBram Moolenaar  let g:patch_args = []
10728dfcce3aSBram Moolenaar  func TPatch()
10738dfcce3aSBram Moolenaar    call add(g:patch_args, readfile(v:fname_in))
10748dfcce3aSBram Moolenaar    call add(g:patch_args, readfile(v:fname_diff))
10758dfcce3aSBram Moolenaar    call writefile(['output file'], v:fname_out)
10768dfcce3aSBram Moolenaar  endfunc
10778dfcce3aSBram Moolenaar  set patchexpr=TPatch()
10788dfcce3aSBram Moolenaar
10798dfcce3aSBram Moolenaar  call writefile(['input file'], 'Xinput')
10808dfcce3aSBram Moolenaar  call writefile(['diff file'], 'Xdiff')
10818dfcce3aSBram Moolenaar  %bwipe!
10828dfcce3aSBram Moolenaar  edit Xinput
10838dfcce3aSBram Moolenaar  diffpatch Xdiff
10848dfcce3aSBram Moolenaar  call assert_equal('output file', getline(1))
10858dfcce3aSBram Moolenaar  call assert_equal('Xinput.new', bufname())
10868dfcce3aSBram Moolenaar  call assert_equal(2, winnr('$'))
10878dfcce3aSBram Moolenaar  call assert_true(&diff)
10888dfcce3aSBram Moolenaar
10898dfcce3aSBram Moolenaar  call delete('Xinput')
10908dfcce3aSBram Moolenaar  call delete('Xdiff')
10918dfcce3aSBram Moolenaar  set patchexpr&
10928dfcce3aSBram Moolenaar  delfunc TPatch
10938dfcce3aSBram Moolenaar  %bwipe!
10948dfcce3aSBram Moolenaarendfunc
10958dfcce3aSBram Moolenaar
1096*511feec6SBram Moolenaarfunc Test_diff_rnu()
1097*511feec6SBram Moolenaar  CheckScreendump
1098*511feec6SBram Moolenaar
1099*511feec6SBram Moolenaar  let content =<< trim END
1100*511feec6SBram Moolenaar    call setline(1, ['a', 'a', 'a', 'y', 'b', 'b', 'b', 'b', 'b'])
1101*511feec6SBram Moolenaar    vnew
1102*511feec6SBram Moolenaar    call setline(1, ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b', 'b', 'b'])
1103*511feec6SBram Moolenaar    windo diffthis
1104*511feec6SBram Moolenaar    setlocal number rnu foldcolumn=0
1105*511feec6SBram Moolenaar  END
1106*511feec6SBram Moolenaar  call writefile(content, 'Xtest_diff_rnu')
1107*511feec6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_rnu', {})
1108*511feec6SBram Moolenaar
1109*511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_01', {})
1110*511feec6SBram Moolenaar
1111*511feec6SBram Moolenaar  call term_sendkeys(buf, "j")
1112*511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_02', {})
1113*511feec6SBram Moolenaar  call term_sendkeys(buf, "j")
1114*511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_03', {})
1115*511feec6SBram Moolenaar
1116*511feec6SBram Moolenaar  " clean up
1117*511feec6SBram Moolenaar  call StopVimInTerminal(buf)
1118*511feec6SBram Moolenaar  call delete('Xtest_diff_rnu')
1119*511feec6SBram Moolenaarendfunc
1120*511feec6SBram Moolenaar
11218dfcce3aSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
1122