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
2463044324eSYegappan Lakshmanan" Test for :diffget/:diffput with a range that is inside a diff chunk
2473044324eSYegappan Lakshmananfunc Test_diffget_diffput_range()
2483044324eSYegappan Lakshmanan  call setline(1, range(1, 10))
2493044324eSYegappan Lakshmanan  new
2503044324eSYegappan Lakshmanan  call setline(1, range(11, 20))
2513044324eSYegappan Lakshmanan  windo diffthis
2523044324eSYegappan Lakshmanan  3,5diffget
2533044324eSYegappan Lakshmanan  call assert_equal(['13', '14', '15'], getline(3, 5))
2543044324eSYegappan Lakshmanan  call setline(1, range(1, 10))
2553044324eSYegappan Lakshmanan  4,8diffput
2563044324eSYegappan Lakshmanan  wincmd p
2573044324eSYegappan Lakshmanan  call assert_equal(['13', '4', '5', '6', '7', '8', '19'], getline(3, 9))
2583044324eSYegappan Lakshmanan  %bw!
2593044324eSYegappan Lakshmananendfunc
2603044324eSYegappan Lakshmanan
2613044324eSYegappan Lakshmanan" Test for :diffget/:diffput with an empty buffer and a non-empty buffer
2623044324eSYegappan Lakshmananfunc Test_diffget_diffput_empty_buffer()
2633044324eSYegappan Lakshmanan  %d _
2643044324eSYegappan Lakshmanan  new
2653044324eSYegappan Lakshmanan  call setline(1, 'one')
2663044324eSYegappan Lakshmanan  windo diffthis
2673044324eSYegappan Lakshmanan  diffget
2683044324eSYegappan Lakshmanan  call assert_equal(['one'], getline(1, '$'))
2693044324eSYegappan Lakshmanan  %d _
2703044324eSYegappan Lakshmanan  diffput
2713044324eSYegappan Lakshmanan  wincmd p
2723044324eSYegappan Lakshmanan  call assert_equal([''], getline(1, '$'))
2733044324eSYegappan Lakshmanan  %bw!
2743044324eSYegappan Lakshmananendfunc
2753044324eSYegappan Lakshmanan
276ae7dba89SBram Moolenaar" :diffput and :diffget completes names of buffers which
277ae7dba89SBram Moolenaar" are in diff mode and which are different then current buffer.
278efcc3290SBram Moolenaar" No completion when the current window is not in diff mode.
279efcc3290SBram Moolenaarfunc Test_diffget_diffput_completion()
280efcc3290SBram Moolenaar  e            Xdiff1 | diffthis
281efcc3290SBram Moolenaar  botright new Xdiff2
282efcc3290SBram Moolenaar  botright new Xdiff3 | split | diffthis
283efcc3290SBram Moolenaar  botright new Xdiff4 | diffthis
284ae7dba89SBram Moolenaar
285efcc3290SBram Moolenaar  wincmd t
286efcc3290SBram Moolenaar  call assert_equal('Xdiff1', bufname('%'))
287ae7dba89SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
288efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff3 Xdiff4', @:)
289ae7dba89SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
290efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff3 Xdiff4', @:)
291efcc3290SBram Moolenaar  call assert_equal(['Xdiff3', 'Xdiff4'], getcompletion('', 'diff_buffer'))
292ae7dba89SBram Moolenaar
293efcc3290SBram Moolenaar  " Xdiff2 is not in diff mode, so no completion for :diffput, :diffget
294efcc3290SBram Moolenaar  wincmd j
295efcc3290SBram Moolenaar  call assert_equal('Xdiff2', bufname('%'))
296ae7dba89SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
297ae7dba89SBram Moolenaar  call assert_equal('"diffput ', @:)
298ae7dba89SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
299ae7dba89SBram Moolenaar  call assert_equal('"diffget ', @:)
300ae7dba89SBram Moolenaar  call assert_equal([], getcompletion('', 'diff_buffer'))
301ae7dba89SBram Moolenaar
302efcc3290SBram Moolenaar  " Xdiff3 is split in 2 windows, only the top one is in diff mode.
303efcc3290SBram Moolenaar  " So completion of :diffput :diffget only happens in the top window.
304efcc3290SBram Moolenaar  wincmd j
305efcc3290SBram Moolenaar  call assert_equal('Xdiff3', bufname('%'))
306efcc3290SBram Moolenaar  call assert_equal(1, &diff)
307efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
308efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff1 Xdiff4', @:)
309efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
310efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff1 Xdiff4', @:)
311efcc3290SBram Moolenaar  call assert_equal(['Xdiff1', 'Xdiff4'], getcompletion('', 'diff_buffer'))
312efcc3290SBram Moolenaar
313efcc3290SBram Moolenaar  wincmd j
314efcc3290SBram Moolenaar  call assert_equal('Xdiff3', bufname('%'))
315efcc3290SBram Moolenaar  call assert_equal(0, &diff)
316efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
317efcc3290SBram Moolenaar  call assert_equal('"diffput ', @:)
318efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
319efcc3290SBram Moolenaar  call assert_equal('"diffget ', @:)
320efcc3290SBram Moolenaar  call assert_equal([], getcompletion('', 'diff_buffer'))
321efcc3290SBram Moolenaar
322efcc3290SBram Moolenaar  wincmd j
323efcc3290SBram Moolenaar  call assert_equal('Xdiff4', bufname('%'))
324efcc3290SBram Moolenaar  call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx')
325efcc3290SBram Moolenaar  call assert_equal('"diffput Xdiff1 Xdiff3', @:)
326efcc3290SBram Moolenaar  call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx')
327efcc3290SBram Moolenaar  call assert_equal('"diffget Xdiff1 Xdiff3', @:)
328efcc3290SBram Moolenaar  call assert_equal(['Xdiff1', 'Xdiff3'], getcompletion('', 'diff_buffer'))
329efcc3290SBram Moolenaar
330ae7dba89SBram Moolenaar  %bwipe
331ae7dba89SBram Moolenaarendfunc
332ae7dba89SBram Moolenaar
33379a213d6SBram Moolenaarfunc Test_dp_do_buffer()
33479a213d6SBram Moolenaar  e! one
33579a213d6SBram Moolenaar  let bn1=bufnr('%')
33679a213d6SBram Moolenaar  let l = range(60)
33779a213d6SBram Moolenaar  call setline(1, l)
33879a213d6SBram Moolenaar  diffthis
33979a213d6SBram Moolenaar
34079a213d6SBram Moolenaar  new two
34179a213d6SBram Moolenaar  let l[10] = 'one'
34279a213d6SBram Moolenaar  let l[20] = 'two'
34379a213d6SBram Moolenaar  let l[30] = 'three'
34479a213d6SBram Moolenaar  let l[40] = 'four'
34579a213d6SBram Moolenaar  let l[50] = 'five'
34679a213d6SBram Moolenaar  call setline(1, l)
34779a213d6SBram Moolenaar  diffthis
34879a213d6SBram Moolenaar
34979a213d6SBram Moolenaar  " dp and do with invalid buffer number.
35079a213d6SBram Moolenaar  11
35179a213d6SBram Moolenaar  call assert_fails('norm 99999dp', 'E102:')
35279a213d6SBram Moolenaar  call assert_fails('norm 99999do', 'E102:')
35379a213d6SBram Moolenaar  call assert_fails('diffput non_existing_buffer', 'E94:')
35479a213d6SBram Moolenaar  call assert_fails('diffget non_existing_buffer', 'E94:')
35579a213d6SBram Moolenaar
35679a213d6SBram Moolenaar  " dp and do with valid buffer number.
35779a213d6SBram Moolenaar  call assert_equal('one', getline('.'))
35879a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'do'
35979a213d6SBram Moolenaar  call assert_equal('10', getline('.'))
36079a213d6SBram Moolenaar  21
36179a213d6SBram Moolenaar  call assert_equal('two', getline('.'))
36279a213d6SBram Moolenaar  diffget one
36379a213d6SBram Moolenaar  call assert_equal('20', getline('.'))
36479a213d6SBram Moolenaar
36579a213d6SBram Moolenaar  31
36679a213d6SBram Moolenaar  exe 'norm ' . bn1 . 'dp'
36779a213d6SBram Moolenaar  41
36879a213d6SBram Moolenaar  diffput one
36979a213d6SBram Moolenaar  wincmd w
37079a213d6SBram Moolenaar  31
37179a213d6SBram Moolenaar  call assert_equal('three', getline('.'))
37279a213d6SBram Moolenaar  41
37379a213d6SBram Moolenaar  call assert_equal('four', getline('.'))
37479a213d6SBram Moolenaar
37579a213d6SBram Moolenaar  " dp and do with buffer number which is not in diff mode.
37679a213d6SBram Moolenaar  new not_in_diff_mode
37779a213d6SBram Moolenaar  let bn3=bufnr('%')
37879a213d6SBram Moolenaar  wincmd w
37979a213d6SBram Moolenaar  51
38079a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "dp"', 'E103:')
38179a213d6SBram Moolenaar  call assert_fails('exe "norm" . bn3 . "do"', 'E103:')
38279a213d6SBram Moolenaar  call assert_fails('diffput not_in_diff_mode', 'E94:')
38379a213d6SBram Moolenaar  call assert_fails('diffget not_in_diff_mode', 'E94:')
38479a213d6SBram Moolenaar
38579a213d6SBram Moolenaar  windo diffoff
38679a213d6SBram Moolenaar  %bwipe!
38742093c0eSBram Moolenaarendfunc
388e67d546fSBram Moolenaar
389df77cef9SBram Moolenaarfunc Test_do_lastline()
390df77cef9SBram Moolenaar  e! one
391df77cef9SBram Moolenaar  call setline(1, ['1','2','3','4','5','6'])
392df77cef9SBram Moolenaar  diffthis
393df77cef9SBram Moolenaar
394df77cef9SBram Moolenaar  new two
395df77cef9SBram Moolenaar  call setline(1, ['2','4','5'])
396df77cef9SBram Moolenaar  diffthis
397df77cef9SBram Moolenaar
398df77cef9SBram Moolenaar  1
399df77cef9SBram Moolenaar  norm dp]c
400df77cef9SBram Moolenaar  norm dp]c
401df77cef9SBram Moolenaar  wincmd w
402df77cef9SBram Moolenaar  call assert_equal(4, line('$'))
403df77cef9SBram Moolenaar  norm G
404df77cef9SBram Moolenaar  norm do
405df77cef9SBram Moolenaar  call assert_equal(3, line('$'))
406df77cef9SBram Moolenaar
407df77cef9SBram Moolenaar  windo diffoff
408df77cef9SBram Moolenaar  %bwipe!
409df77cef9SBram Moolenaarendfunc
410df77cef9SBram Moolenaar
411e67d546fSBram Moolenaarfunc Test_diffoff()
412e67d546fSBram Moolenaar  enew!
413e67d546fSBram Moolenaar  call setline(1, ['Two', 'Three'])
41479a213d6SBram Moolenaar  redraw
415e67d546fSBram Moolenaar  let normattr = screenattr(1, 1)
416e67d546fSBram Moolenaar  diffthis
417e67d546fSBram Moolenaar  botright vert new
418e67d546fSBram Moolenaar  call setline(1, ['One', '', 'Two', 'Three'])
419e67d546fSBram Moolenaar  diffthis
420e67d546fSBram Moolenaar  redraw
421196b4664SBram Moolenaar  call assert_notequal(normattr, 1->screenattr(1))
422e67d546fSBram Moolenaar  diffoff!
423e67d546fSBram Moolenaar  redraw
424e67d546fSBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
425e67d546fSBram Moolenaar  bwipe!
426e67d546fSBram Moolenaar  bwipe!
427e67d546fSBram Moolenaarendfunc
428025e3e0bSBram Moolenaar
429e828b762SBram Moolenaarfunc Common_icase_test()
430e828b762SBram Moolenaar  edit one
431da22b8ccSBram Moolenaar  call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
43279a213d6SBram Moolenaar  redraw
43379a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
43479a213d6SBram Moolenaar  diffthis
43579a213d6SBram Moolenaar
43679a213d6SBram Moolenaar  botright vert new two
437da22b8ccSBram Moolenaar  call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE'])
43879a213d6SBram Moolenaar  diffthis
43979a213d6SBram Moolenaar
44079a213d6SBram Moolenaar  redraw
44179a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
44279a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
44379a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
44479a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
44579a213d6SBram Moolenaar
446da22b8ccSBram Moolenaar  let dtextattr = screenattr(5, 3)
447da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 1))
448da22b8ccSBram Moolenaar  call assert_notequal(dtextattr, screenattr(5, 5))
449da22b8ccSBram Moolenaar
45079a213d6SBram Moolenaar  diffoff!
45179a213d6SBram Moolenaar  %bwipe!
452e828b762SBram Moolenaarendfunc
453e828b762SBram Moolenaar
454e828b762SBram Moolenaarfunc Test_diffopt_icase()
455e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0
456e828b762SBram Moolenaar  call Common_icase_test()
45779a213d6SBram Moolenaar  set diffopt&
45879a213d6SBram Moolenaarendfunc
45979a213d6SBram Moolenaar
460e828b762SBram Moolenaarfunc Test_diffopt_icase_internal()
461e828b762SBram Moolenaar  set diffopt=icase,foldcolumn:0,internal
462e828b762SBram Moolenaar  call Common_icase_test()
463e828b762SBram Moolenaar  set diffopt&
464e828b762SBram Moolenaarendfunc
46579a213d6SBram Moolenaar
466e828b762SBram Moolenaarfunc Common_iwhite_test()
467e828b762SBram Moolenaar  edit one
468e828b762SBram Moolenaar  " Difference in trailing spaces and amount of spaces should be ignored,
46979a213d6SBram Moolenaar  " but not other space differences.
470e828b762SBram Moolenaar  call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four'])
47179a213d6SBram Moolenaar  redraw
47279a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
47379a213d6SBram Moolenaar  diffthis
47479a213d6SBram Moolenaar
47579a213d6SBram Moolenaar  botright vert new two
476e828b762SBram Moolenaar  call setline(1, ["One\t ", "Two\t ", 'Three', 'one   two', 'onetwo', ' Four'])
47779a213d6SBram Moolenaar  diffthis
47879a213d6SBram Moolenaar
47979a213d6SBram Moolenaar  redraw
48079a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
48179a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
48279a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(3, 1))
483e828b762SBram Moolenaar  call assert_equal(normattr, screenattr(4, 1))
484e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(5, 1))
485e828b762SBram Moolenaar  call assert_notequal(normattr, screenattr(6, 1))
48679a213d6SBram Moolenaar
48779a213d6SBram Moolenaar  diffoff!
48879a213d6SBram Moolenaar  %bwipe!
489e828b762SBram Moolenaarendfunc
490e828b762SBram Moolenaar
491e828b762SBram Moolenaarfunc Test_diffopt_iwhite()
492e828b762SBram Moolenaar  set diffopt=iwhite,foldcolumn:0
493e828b762SBram Moolenaar  call Common_iwhite_test()
494e828b762SBram Moolenaar  set diffopt&
495e828b762SBram Moolenaarendfunc
496e828b762SBram Moolenaar
497e828b762SBram Moolenaarfunc Test_diffopt_iwhite_internal()
498e828b762SBram Moolenaar  set diffopt=internal,iwhite,foldcolumn:0
499e828b762SBram Moolenaar  call Common_iwhite_test()
50079a213d6SBram Moolenaar  set diffopt&
50179a213d6SBram Moolenaarendfunc
50279a213d6SBram Moolenaar
50379a213d6SBram Moolenaarfunc Test_diffopt_context()
50479a213d6SBram Moolenaar  enew!
50579a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5', '6', '7'])
50679a213d6SBram Moolenaar  diffthis
50779a213d6SBram Moolenaar  new
50879a213d6SBram Moolenaar  call setline(1, ['1', '2', '3', '4', '5x', '6', '7'])
50979a213d6SBram Moolenaar  diffthis
51079a213d6SBram Moolenaar
51179a213d6SBram Moolenaar  set diffopt=context:2
51279a213d6SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
513e828b762SBram Moolenaar  set diffopt=internal,context:2
514e828b762SBram Moolenaar  call assert_equal('+--  2 lines: 1', foldtextresult(1))
515e828b762SBram Moolenaar
51679a213d6SBram Moolenaar  set diffopt=context:1
51779a213d6SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
518e828b762SBram Moolenaar  set diffopt=internal,context:1
519e828b762SBram Moolenaar  call assert_equal('+--  3 lines: 1', foldtextresult(1))
52079a213d6SBram Moolenaar
52179a213d6SBram Moolenaar  diffoff!
52279a213d6SBram Moolenaar  %bwipe!
52379a213d6SBram Moolenaar  set diffopt&
52479a213d6SBram Moolenaarendfunc
52579a213d6SBram Moolenaar
52679a213d6SBram Moolenaarfunc Test_diffopt_horizontal()
527e828b762SBram Moolenaar  set diffopt=internal,horizontal
52879a213d6SBram Moolenaar  diffsplit
52979a213d6SBram Moolenaar
53079a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1))
53179a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(2))
53279a213d6SBram Moolenaar  call assert_equal(&lines, winheight(1) + winheight(2) + 3)
53379a213d6SBram Moolenaar  call assert_inrange(0, 1, winheight(1) - winheight(2))
53479a213d6SBram Moolenaar
53579a213d6SBram Moolenaar  set diffopt&
53679a213d6SBram Moolenaar  diffoff!
53779a213d6SBram Moolenaar  %bwipe
53879a213d6SBram Moolenaarendfunc
53979a213d6SBram Moolenaar
54079a213d6SBram Moolenaarfunc Test_diffopt_vertical()
541e828b762SBram Moolenaar  set diffopt=internal,vertical
54279a213d6SBram Moolenaar  diffsplit
54379a213d6SBram Moolenaar
54479a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(1))
54579a213d6SBram Moolenaar  call assert_equal(&lines - 2, winheight(2))
54679a213d6SBram Moolenaar  call assert_equal(&columns, winwidth(1) + winwidth(2) + 1)
54779a213d6SBram Moolenaar  call assert_inrange(0, 1, winwidth(1) - winwidth(2))
54879a213d6SBram Moolenaar
54979a213d6SBram Moolenaar  set diffopt&
55079a213d6SBram Moolenaar  diffoff!
55179a213d6SBram Moolenaar  %bwipe
55279a213d6SBram Moolenaarendfunc
55379a213d6SBram Moolenaar
55497ce4192SBram Moolenaarfunc Test_diffopt_hiddenoff()
555e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0,hiddenoff
55697ce4192SBram Moolenaar  e! one
55797ce4192SBram Moolenaar  call setline(1, ['Two', 'Three'])
55897ce4192SBram Moolenaar  redraw
55997ce4192SBram Moolenaar  let normattr = screenattr(1, 1)
56097ce4192SBram Moolenaar  diffthis
56197ce4192SBram Moolenaar  botright vert new two
56297ce4192SBram Moolenaar  call setline(1, ['One', 'Four'])
56397ce4192SBram Moolenaar  diffthis
56497ce4192SBram Moolenaar  redraw
56597ce4192SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
56697ce4192SBram Moolenaar  set hidden
56797ce4192SBram Moolenaar  close
56897ce4192SBram Moolenaar  redraw
56997ce4192SBram Moolenaar  " should not diffing with hidden buffer two while 'hiddenoff' is enabled
57097ce4192SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
57197ce4192SBram Moolenaar
57297ce4192SBram Moolenaar  bwipe!
57397ce4192SBram Moolenaar  bwipe!
57497ce4192SBram Moolenaar  set hidden& diffopt&
57597ce4192SBram Moolenaarendfunc
57697ce4192SBram Moolenaar
57725ea0544SBram Moolenaarfunc Test_diffoff_hidden()
578e828b762SBram Moolenaar  set diffopt=internal,filler,foldcolumn:0
57925ea0544SBram Moolenaar  e! one
58025ea0544SBram Moolenaar  call setline(1, ['Two', 'Three'])
58179a213d6SBram Moolenaar  redraw
58225ea0544SBram Moolenaar  let normattr = screenattr(1, 1)
58325ea0544SBram Moolenaar  diffthis
58425ea0544SBram Moolenaar  botright vert new two
58525ea0544SBram Moolenaar  call setline(1, ['One', 'Four'])
58625ea0544SBram Moolenaar  diffthis
58725ea0544SBram Moolenaar  redraw
58825ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
58925ea0544SBram Moolenaar  set hidden
59025ea0544SBram Moolenaar  close
59125ea0544SBram Moolenaar  redraw
59225ea0544SBram Moolenaar  " diffing with hidden buffer two
59325ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
59425ea0544SBram Moolenaar  diffoff
59525ea0544SBram Moolenaar  redraw
59625ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
59725ea0544SBram Moolenaar  diffthis
59825ea0544SBram Moolenaar  redraw
59925ea0544SBram Moolenaar  " still diffing with hidden buffer two
60025ea0544SBram Moolenaar  call assert_notequal(normattr, screenattr(1, 1))
60125ea0544SBram Moolenaar  diffoff!
60225ea0544SBram Moolenaar  redraw
60325ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
60425ea0544SBram Moolenaar  diffthis
60525ea0544SBram Moolenaar  redraw
60625ea0544SBram Moolenaar  " no longer diffing with hidden buffer two
60725ea0544SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
60825ea0544SBram Moolenaar
60925ea0544SBram Moolenaar  bwipe!
61025ea0544SBram Moolenaar  bwipe!
61125ea0544SBram Moolenaar  set hidden& diffopt&
61225ea0544SBram Moolenaarendfunc
61325ea0544SBram Moolenaar
614025e3e0bSBram Moolenaarfunc Test_setting_cursor()
615025e3e0bSBram Moolenaar  new Xtest1
616025e3e0bSBram Moolenaar  put =range(1,90)
617025e3e0bSBram Moolenaar  wq
618025e3e0bSBram Moolenaar  new Xtest2
619025e3e0bSBram Moolenaar  put =range(1,100)
620025e3e0bSBram Moolenaar  wq
621025e3e0bSBram Moolenaar
622025e3e0bSBram Moolenaar  tabe Xtest2
623025e3e0bSBram Moolenaar  $
624025e3e0bSBram Moolenaar  diffsp Xtest1
625025e3e0bSBram Moolenaar  tabclose
626025e3e0bSBram Moolenaar
627025e3e0bSBram Moolenaar  call delete('Xtest1')
628025e3e0bSBram Moolenaar  call delete('Xtest2')
629025e3e0bSBram Moolenaarendfunc
630aeb661e1SBram Moolenaar
631aeb661e1SBram Moolenaarfunc Test_diff_move_to()
632aeb661e1SBram Moolenaar  new
633aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
634aeb661e1SBram Moolenaar  diffthis
635aeb661e1SBram Moolenaar  vnew
636aeb661e1SBram Moolenaar  call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x'])
637aeb661e1SBram Moolenaar  diffthis
638aeb661e1SBram Moolenaar  norm ]c
639aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
640aeb661e1SBram Moolenaar  norm 3]c
641aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
642aeb661e1SBram Moolenaar  norm 10]c
643aeb661e1SBram Moolenaar  call assert_equal(11, line('.'))
644aeb661e1SBram Moolenaar  norm [c
645aeb661e1SBram Moolenaar  call assert_equal(9, line('.'))
646aeb661e1SBram Moolenaar  norm 2[c
647aeb661e1SBram Moolenaar  call assert_equal(5, line('.'))
648aeb661e1SBram Moolenaar  norm 10[c
649aeb661e1SBram Moolenaar  call assert_equal(2, line('.'))
650aeb661e1SBram Moolenaar  %bwipe!
651aeb661e1SBram Moolenaarendfunc
652aeb661e1SBram Moolenaar
65379a213d6SBram Moolenaarfunc Test_diffexpr()
654aeb313f3SBram Moolenaar  CheckExecutable diff
65579a213d6SBram Moolenaar
65679a213d6SBram Moolenaar  func DiffExpr()
657485b6271SBram Moolenaar    " Prepend some text to check diff type detection
6583b8defd0SBram Moolenaar    call writefile(['warning', '  message'], v:fname_out)
6593b8defd0SBram Moolenaar    silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>>' . v:fname_out
66079a213d6SBram Moolenaar  endfunc
66179a213d6SBram Moolenaar  set diffexpr=DiffExpr()
66279a213d6SBram Moolenaar  set diffopt=foldcolumn:0
66379a213d6SBram Moolenaar
66479a213d6SBram Moolenaar  enew!
66579a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
66679a213d6SBram Moolenaar  redraw
66779a213d6SBram Moolenaar  let normattr = screenattr(1, 1)
66879a213d6SBram Moolenaar  diffthis
66979a213d6SBram Moolenaar
67079a213d6SBram Moolenaar  botright vert new
67179a213d6SBram Moolenaar  call setline(1, ['one', 'two', 'three.'])
67279a213d6SBram Moolenaar  diffthis
67379a213d6SBram Moolenaar
67479a213d6SBram Moolenaar  redraw
67579a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(1, 1))
67679a213d6SBram Moolenaar  call assert_equal(normattr, screenattr(2, 1))
67779a213d6SBram Moolenaar  call assert_notequal(normattr, screenattr(3, 1))
6783044324eSYegappan Lakshmanan  diffoff!
67979a213d6SBram Moolenaar
6803044324eSYegappan Lakshmanan  " Try using an non-existing function for 'diffexpr'.
6813044324eSYegappan Lakshmanan  set diffexpr=NewDiffFunc()
6823044324eSYegappan Lakshmanan  call assert_fails('windo diffthis', ['E117:', 'E97:'])
68379a213d6SBram Moolenaar  diffoff!
68479a213d6SBram Moolenaar  %bwipe!
68579a213d6SBram Moolenaar  set diffexpr& diffopt&
68679a213d6SBram Moolenaarendfunc
68779a213d6SBram Moolenaar
688aeb661e1SBram Moolenaarfunc Test_diffpatch()
689aeb661e1SBram Moolenaar  " The patch program on MS-Windows may fail or hang.
6906d91bcb4SBram Moolenaar  CheckExecutable patch
6916d91bcb4SBram Moolenaar  CheckUnix
692aeb661e1SBram Moolenaar  new
693aeb661e1SBram Moolenaar  insert
694aeb661e1SBram Moolenaar***************
695aeb661e1SBram Moolenaar*** 1,3 ****
696aeb661e1SBram Moolenaar  1
697aeb661e1SBram Moolenaar! 2
698aeb661e1SBram Moolenaar  3
699aeb661e1SBram Moolenaar--- 1,4 ----
700aeb661e1SBram Moolenaar  1
701aeb661e1SBram Moolenaar! 2x
702aeb661e1SBram Moolenaar  3
703aeb661e1SBram Moolenaar+ 4
704aeb661e1SBram Moolenaar.
70597fbc404SBram Moolenaar  saveas! Xpatch
706aeb661e1SBram Moolenaar  bwipe!
707aeb661e1SBram Moolenaar  new
708aeb661e1SBram Moolenaar  call assert_fails('diffpatch Xpatch', 'E816:')
7091ef73e33SBram Moolenaar
710a95ab321SBram Moolenaar  for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch']
711aeb661e1SBram Moolenaar    call setline(1, ['1', '2', '3'])
7121ef73e33SBram Moolenaar    if name != 'Xpatch'
7131ef73e33SBram Moolenaar      call rename('Xpatch', name)
7141ef73e33SBram Moolenaar    endif
7151ef73e33SBram Moolenaar    exe 'diffpatch ' . escape(name, '$')
716aeb661e1SBram Moolenaar    call assert_equal(['1', '2x', '3', '4'], getline(1, '$'))
7171ef73e33SBram Moolenaar    if name != 'Xpatch'
7181ef73e33SBram Moolenaar      call rename(name, 'Xpatch')
7191ef73e33SBram Moolenaar    endif
7201ef73e33SBram Moolenaar    bwipe!
7211ef73e33SBram Moolenaar  endfor
7221ef73e33SBram Moolenaar
723aeb661e1SBram Moolenaar  call delete('Xpatch')
724aeb661e1SBram Moolenaar  bwipe!
725aeb661e1SBram Moolenaarendfunc
726aeb661e1SBram Moolenaar
727aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers()
728aeb661e1SBram Moolenaar  for i in range(1, 8)
729aeb661e1SBram Moolenaar    exe "new Xtest" . i
730aeb661e1SBram Moolenaar    diffthis
731aeb661e1SBram Moolenaar  endfor
732aeb661e1SBram Moolenaar  new Xtest9
733aeb661e1SBram Moolenaar  call assert_fails('diffthis', 'E96:')
734aeb661e1SBram Moolenaar  %bwipe!
735aeb661e1SBram Moolenaarendfunc
736aeb661e1SBram Moolenaar
737aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable()
738aeb661e1SBram Moolenaar  new
739aeb661e1SBram Moolenaar  call setline(1, [1, 2, 3, 4])
740aeb661e1SBram Moolenaar  setl nomodifiable
741aeb661e1SBram Moolenaar  diffthis
742aeb661e1SBram Moolenaar  vnew
743aeb661e1SBram Moolenaar  call setline(1, ['1x', 2, 3, 3, 4])
744aeb661e1SBram Moolenaar  diffthis
745aeb661e1SBram Moolenaar  call assert_fails('norm dp', 'E793:')
746aeb661e1SBram Moolenaar  setl nomodifiable
747aeb661e1SBram Moolenaar  call assert_fails('norm do', 'E21:')
748aeb661e1SBram Moolenaar  %bwipe!
749aeb661e1SBram Moolenaarendfunc
750f58a8475SBram Moolenaar
75197fbc404SBram Moolenaarfunc Test_diff_hlID()
75297fbc404SBram Moolenaar  new
75397fbc404SBram Moolenaar  call setline(1, [1, 2, 3])
75497fbc404SBram Moolenaar  diffthis
75597fbc404SBram Moolenaar  vnew
75697fbc404SBram Moolenaar  call setline(1, ['1x', 2, 'x', 3])
75797fbc404SBram Moolenaar  diffthis
75897fbc404SBram Moolenaar  redraw
75997fbc404SBram Moolenaar
760a74e4946SBram Moolenaar  call diff_hlID(-1, 1)->synIDattr("name")->assert_equal("")
76197fbc404SBram Moolenaar
762a74e4946SBram Moolenaar  call diff_hlID(1, 1)->synIDattr("name")->assert_equal("DiffChange")
763a74e4946SBram Moolenaar  call diff_hlID(1, 2)->synIDattr("name")->assert_equal("DiffText")
764a74e4946SBram Moolenaar  call diff_hlID(2, 1)->synIDattr("name")->assert_equal("")
765a74e4946SBram Moolenaar  call diff_hlID(3, 1)->synIDattr("name")->assert_equal("DiffAdd")
7661a3a8916SBram Moolenaar  eval 4->diff_hlID(1)->synIDattr("name")->assert_equal("")
76797fbc404SBram Moolenaar
76897fbc404SBram Moolenaar  wincmd w
76997fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
77097fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "")
77197fbc404SBram Moolenaar  call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "")
77297fbc404SBram Moolenaar
77397fbc404SBram Moolenaar  %bwipe!
77497fbc404SBram Moolenaarendfunc
77597fbc404SBram Moolenaar
77697fbc404SBram Moolenaarfunc Test_diff_filler()
77797fbc404SBram Moolenaar  new
77897fbc404SBram Moolenaar  call setline(1, [1, 2, 3, 'x', 4])
77997fbc404SBram Moolenaar  diffthis
78097fbc404SBram Moolenaar  vnew
78197fbc404SBram Moolenaar  call setline(1, [1, 2, 'y', 'y', 3, 4])
78297fbc404SBram Moolenaar  diffthis
78397fbc404SBram Moolenaar  redraw
78497fbc404SBram Moolenaar
7851a3a8916SBram Moolenaar  call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'v:val->diff_filler()'))
78697fbc404SBram Moolenaar  wincmd w
78797fbc404SBram Moolenaar  call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)'))
78897fbc404SBram Moolenaar
78997fbc404SBram Moolenaar  %bwipe!
79097fbc404SBram Moolenaarendfunc
79197fbc404SBram Moolenaar
792f58a8475SBram Moolenaarfunc Test_diff_lastline()
793f58a8475SBram Moolenaar  enew!
794f58a8475SBram Moolenaar  only!
795f58a8475SBram Moolenaar  call setline(1, ['This is a ', 'line with five ', 'rows'])
796f58a8475SBram Moolenaar  diffthis
797f58a8475SBram Moolenaar  botright vert new
798f58a8475SBram Moolenaar  call setline(1, ['This is', 'a line with ', 'four rows'])
799f58a8475SBram Moolenaar  diffthis
800f58a8475SBram Moolenaar  1
801f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
802f58a8475SBram Moolenaar  call feedkeys("Je a\<CR>", 'tx')
803f58a8475SBram Moolenaar  let w1lines = winline()
804f58a8475SBram Moolenaar  wincmd w
805f58a8475SBram Moolenaar  $
806f58a8475SBram Moolenaar  let w2lines = winline()
807f58a8475SBram Moolenaar  call assert_equal(w2lines, w1lines)
808f58a8475SBram Moolenaar  bwipe!
809f58a8475SBram Moolenaar  bwipe!
810f58a8475SBram Moolenaarendfunc
811e828b762SBram Moolenaar
812785fc656SBram Moolenaarfunc WriteDiffFiles(buf, list1, list2)
813e828b762SBram Moolenaar  call writefile(a:list1, 'Xfile1')
814e828b762SBram Moolenaar  call writefile(a:list2, 'Xfile2')
815785fc656SBram Moolenaar  if a:buf
816785fc656SBram Moolenaar    call term_sendkeys(a:buf, ":checktime\<CR>")
817785fc656SBram Moolenaar  endif
818e828b762SBram Moolenaarendfunc
819e828b762SBram Moolenaar
820785fc656SBram Moolenaar" Verify a screendump with both the internal and external diff.
821e828b762SBram Moolenaarfunc VerifyBoth(buf, dumpfile, extra)
822e828b762SBram Moolenaar  " trailing : for leaving the cursor on the command line
823785fc656SBram Moolenaar  for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"]
824e828b762SBram Moolenaar    call term_sendkeys(a:buf, cmd)
825e828b762SBram Moolenaar    if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
826485b6271SBram Moolenaar      " don't let the next iteration overwrite the "failed" file.
827485b6271SBram Moolenaar      return
828e828b762SBram Moolenaar    endif
829e828b762SBram Moolenaar  endfor
830485b6271SBram Moolenaar
831485b6271SBram Moolenaar  " also test unified diff
832485b6271SBram Moolenaar  call term_sendkeys(a:buf, ":call SetupUnified()\<CR>:")
833ad5c178aSglacambre  call term_sendkeys(a:buf, ":redraw!\<CR>:")
834485b6271SBram Moolenaar  call VerifyScreenDump(a:buf, a:dumpfile, {}, 'unified')
835485b6271SBram Moolenaar  call term_sendkeys(a:buf, ":call StopUnified()\<CR>:")
836e828b762SBram Moolenaarendfunc
837e828b762SBram Moolenaar
838785fc656SBram Moolenaar" Verify a screendump with the internal diff only.
839785fc656SBram Moolenaarfunc VerifyInternal(buf, dumpfile, extra)
840785fc656SBram Moolenaar  call term_sendkeys(a:buf, ":diffupdate!\<CR>")
841785fc656SBram Moolenaar  " trailing : for leaving the cursor on the command line
842785fc656SBram Moolenaar  call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:")
8436a2c5a7dSBram Moolenaar  call TermWait(a:buf)
844785fc656SBram Moolenaar  call VerifyScreenDump(a:buf, a:dumpfile, {})
845785fc656SBram Moolenaarendfunc
846785fc656SBram Moolenaar
847e828b762SBram Moolenaarfunc Test_diff_screen()
8483c8ee629SBram Moolenaar  CheckScreendump
8493c8ee629SBram Moolenaar  CheckFeature menu
8503c8ee629SBram Moolenaar
851485b6271SBram Moolenaar  let lines =<< trim END
852485b6271SBram Moolenaar      func UnifiedDiffExpr()
853485b6271SBram Moolenaar        " Prepend some text to check diff type detection
854485b6271SBram Moolenaar        call writefile(['warning', '  message'], v:fname_out)
855ad5c178aSglacambre        silent exe '!diff -U0 ' .. v:fname_in .. ' ' .. v:fname_new .. '>>' .. v:fname_out
856485b6271SBram Moolenaar      endfunc
857485b6271SBram Moolenaar      func SetupUnified()
858485b6271SBram Moolenaar        set diffexpr=UnifiedDiffExpr()
859ad5c178aSglacambre        diffupdate
860485b6271SBram Moolenaar      endfunc
861485b6271SBram Moolenaar      func StopUnified()
862485b6271SBram Moolenaar        set diffexpr=
863485b6271SBram Moolenaar      endfunc
864485b6271SBram Moolenaar  END
865485b6271SBram Moolenaar  call writefile(lines, 'XdiffSetup')
866485b6271SBram Moolenaar
867e828b762SBram Moolenaar  " clean up already existing swap files, just in case
868e828b762SBram Moolenaar  call delete('.Xfile1.swp')
869e828b762SBram Moolenaar  call delete('.Xfile2.swp')
870e828b762SBram Moolenaar
871e828b762SBram Moolenaar  " Test 1: Add a line in beginning of file 2
872785fc656SBram 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])
873485b6271SBram Moolenaar  let buf = RunVimInTerminal('-d -S XdiffSetup Xfile1 Xfile2', {})
8748ee4c01bSBram Moolenaar  " Set autoread mode, so that Vim won't complain once we re-write the test
875e828b762SBram Moolenaar  " files
876785fc656SBram Moolenaar  call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
877e828b762SBram Moolenaar
878e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_01', '')
879e828b762SBram Moolenaar
880e828b762SBram Moolenaar  " Test 2: Add a line in beginning of file 1
881785fc656SBram 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])
882e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_02', '')
883e828b762SBram Moolenaar
884e828b762SBram Moolenaar  " Test 3: Add a line at the end of file 2
885785fc656SBram 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])
886e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_03', '')
887e828b762SBram Moolenaar
888e828b762SBram Moolenaar  " Test 4: Add a line at the end of file 1
889785fc656SBram 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])
890e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_04', '')
891e828b762SBram Moolenaar
892e828b762SBram Moolenaar  " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
893785fc656SBram 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])
894e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_05', '')
895e828b762SBram Moolenaar
896e828b762SBram Moolenaar  " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
897785fc656SBram 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])
898e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_06', '')
899e828b762SBram Moolenaar
900b9ddda6cSBram Moolenaar  " Variants on test 6 with different context settings
901b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:2\<cr>")
902b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.2', {})
903b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:2\<cr>")
904b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:1\<cr>")
905b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.1', {})
906b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:1\<cr>")
907b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=context:0\<cr>")
908b9ddda6cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_06.0', {})
909b9ddda6cSBram Moolenaar  call term_sendkeys(buf, ":set diffopt-=context:0\<cr>")
910b9ddda6cSBram Moolenaar
911e828b762SBram Moolenaar  " Test 7 - 9: Test normal/patience/histogram diff algorithm
912785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
913e828b762SBram Moolenaar      \ '    int i;', '    for(i = 0; i < 10; i++)', '    {', '        printf("Your answer is: ");',
914e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '', 'int fact(int n)', '{', '    if(n > 1)', '    {',
915e828b762SBram Moolenaar      \ '        return fact(n-1) * n;', '    }', '    return 1;', '}', '', 'int main(int argc, char **argv)',
916e828b762SBram Moolenaar      \ '{', '    frobnitz(fact(10));', '}'],
917e828b762SBram Moolenaar      \ ['#include <stdio.h>', '', 'int fib(int n)', '{', '    if(n > 2)', '    {',
918e828b762SBram Moolenaar      \ '        return fib(n-1) + fib(n-2);', '    }', '    return 1;', '}', '', '// Frobs foo heartily',
919e828b762SBram Moolenaar      \ 'int frobnitz(int foo)', '{', '    int i;', '    for(i = 0; i < 10; i++)', '    {',
920e828b762SBram Moolenaar      \ '        printf("%d\n", foo);', '    }', '}', '',
921e828b762SBram Moolenaar      \ 'int main(int argc, char **argv)', '{', '    frobnitz(fib(10));', '}'])
922e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
923e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
924e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_07', {})
925e828b762SBram Moolenaar
926e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>")
927e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_08', {})
928e828b762SBram Moolenaar
929e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>")
930e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_09', {})
931e828b762SBram Moolenaar
932e828b762SBram Moolenaar  " Test 10-11: normal/indent-heuristic
933e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim\<cr>")
934785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['', '  def finalize(values)', '', '    values.each do |v|', '      v.finalize', '    end'],
935e828b762SBram Moolenaar      \ ['', '  def finalize(values)', '', '    values.each do |v|', '      v.prepare', '    end', '',
936e828b762SBram Moolenaar      \ '    values.each do |v|', '      v.finalize', '    end'])
937e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
938e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
939e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_10', {})
940e828b762SBram Moolenaar
941b6fc7285SBram Moolenaar  " Leave trailing : at commandline!
942b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>:\<cr>")
943b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'one')
944b6fc7285SBram Moolenaar  " shouldn't matter, if indent-algorithm comes before or after the algorithm
945b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&\<cr>")
946b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=indent-heuristic,algorithm:patience\<cr>:\<cr>")
947b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'two')
948b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&\<cr>")
949b6fc7285SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=algorithm:patience,indent-heuristic\<cr>:\<cr>")
950b6fc7285SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_11', {}, 'three')
951e828b762SBram Moolenaar
952e828b762SBram Moolenaar  " Test 12: diff the same file
953785fc656SBram Moolenaar  call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
954e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_12', '')
955e828b762SBram Moolenaar
956e828b762SBram Moolenaar  " Test 13: diff an empty file
957785fc656SBram Moolenaar  call WriteDiffFiles(buf, [], [])
958e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_13', '')
959e828b762SBram Moolenaar
960e828b762SBram Moolenaar  " Test 14: test diffopt+=icase
961785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe'])
962e828b762SBram Moolenaar  call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
963e828b762SBram Moolenaar
964e828b762SBram Moolenaar  " Test 15-16: test diffopt+=iwhite
965785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['int main()', '{', '   printf("Hello, World!");', '   return 0;', '}'],
966e828b762SBram Moolenaar      \ ['int main()', '{', '   if (0)', '   {', '      printf("Hello, World!");', '      return 0;', '   }', '}'])
967e828b762SBram Moolenaar  call term_sendkeys(buf, ":diffupdate!\<cr>")
968e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
969e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_15', {})
970e828b762SBram Moolenaar  call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
971e828b762SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_16', {})
972e828b762SBram Moolenaar
973785fc656SBram Moolenaar  " Test 17: test diffopt+=iblank
974785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy'])
975785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank")
976785fc656SBram Moolenaar
977785fc656SBram Moolenaar  " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol
978785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite")
979785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall")
980785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol")
981785fc656SBram Moolenaar
982785fc656SBram Moolenaar  " Test 19: test diffopt+=iwhiteeol
983785fc656SBram Moolenaar  call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx  xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar'])
984785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol")
985785fc656SBram Moolenaar
986785fc656SBram Moolenaar  " Test 19: test diffopt+=iwhiteall
987785fc656SBram Moolenaar  call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall")
988785fc656SBram Moolenaar
989e828b762SBram Moolenaar  " clean up
990e828b762SBram Moolenaar  call StopVimInTerminal(buf)
991e828b762SBram Moolenaar  call delete('Xfile1')
992e828b762SBram Moolenaar  call delete('Xfile2')
993485b6271SBram Moolenaar  call delete('XdiffSetup')
994e828b762SBram Moolenaarendfunc
995e828b762SBram Moolenaar
9964a5abbd6SBram Moolenaarfunc Test_diff_with_cursorline()
9973c8ee629SBram Moolenaar  CheckScreendump
9984a5abbd6SBram Moolenaar
9994a5abbd6SBram Moolenaar  call writefile([
10004a5abbd6SBram Moolenaar	\ 'hi CursorLine ctermbg=red ctermfg=white',
10014a5abbd6SBram Moolenaar	\ 'set cursorline',
10024a5abbd6SBram Moolenaar	\ 'call setline(1, ["foo","foo","foo","bar"])',
10034a5abbd6SBram Moolenaar	\ 'vnew',
10044a5abbd6SBram Moolenaar	\ 'call setline(1, ["bee","foo","foo","baz"])',
10054a5abbd6SBram Moolenaar	\ 'windo diffthis',
10064a5abbd6SBram Moolenaar	\ '2wincmd w',
10074a5abbd6SBram Moolenaar	\ ], 'Xtest_diff_cursorline')
10084a5abbd6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {})
10094a5abbd6SBram Moolenaar
10104a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {})
10114a5abbd6SBram Moolenaar  call term_sendkeys(buf, "j")
10124a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {})
10134a5abbd6SBram Moolenaar  call term_sendkeys(buf, "j")
10144a5abbd6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {})
10154a5abbd6SBram Moolenaar
10164a5abbd6SBram Moolenaar  " clean up
10174a5abbd6SBram Moolenaar  call StopVimInTerminal(buf)
10184a5abbd6SBram Moolenaar  call delete('Xtest_diff_cursorline')
10194a5abbd6SBram Moolenaarendfunc
1020f7acf2b6SBram Moolenaar
1021*4f33bc20Szeertzjqfunc Test_diff_with_cursorline_breakindent()
1022*4f33bc20Szeertzjq  CheckScreendump
1023*4f33bc20Szeertzjq
1024*4f33bc20Szeertzjq  call writefile([
1025*4f33bc20Szeertzjq	\ 'hi CursorLine ctermbg=red ctermfg=white',
1026*4f33bc20Szeertzjq	\ 'set noequalalways wrap diffopt=followwrap cursorline breakindent',
1027*4f33bc20Szeertzjq	\ '50vnew',
1028*4f33bc20Szeertzjq	\ 'call setline(1, ["  ","  ","  ","  "])',
1029*4f33bc20Szeertzjq	\ 'exe "norm 20Afoo\<Esc>j20Afoo\<Esc>j20Afoo\<Esc>j20Abar\<Esc>"',
1030*4f33bc20Szeertzjq	\ 'vnew',
1031*4f33bc20Szeertzjq	\ 'call setline(1, ["  ","  ","  ","  "])',
1032*4f33bc20Szeertzjq	\ 'exe "norm 20Abee\<Esc>j20Afoo\<Esc>j20Afoo\<Esc>j20Abaz\<Esc>"',
1033*4f33bc20Szeertzjq	\ 'windo diffthis',
1034*4f33bc20Szeertzjq	\ '2wincmd w',
1035*4f33bc20Szeertzjq	\ ], 'Xtest_diff_cursorline_breakindent')
1036*4f33bc20Szeertzjq  let buf = RunVimInTerminal('-S Xtest_diff_cursorline_breakindent', {})
1037*4f33bc20Szeertzjq
1038*4f33bc20Szeertzjq  call term_sendkeys(buf, "gg0")
1039*4f33bc20Szeertzjq  call VerifyScreenDump(buf, 'Test_diff_with_cul_bri_01', {})
1040*4f33bc20Szeertzjq  call term_sendkeys(buf, "j")
1041*4f33bc20Szeertzjq  call VerifyScreenDump(buf, 'Test_diff_with_cul_bri_02', {})
1042*4f33bc20Szeertzjq  call term_sendkeys(buf, "j")
1043*4f33bc20Szeertzjq  call VerifyScreenDump(buf, 'Test_diff_with_cul_bri_03', {})
1044*4f33bc20Szeertzjq  call term_sendkeys(buf, "j")
1045*4f33bc20Szeertzjq  call VerifyScreenDump(buf, 'Test_diff_with_cul_bri_04', {})
1046*4f33bc20Szeertzjq
1047*4f33bc20Szeertzjq  " clean up
1048*4f33bc20Szeertzjq  call StopVimInTerminal(buf)
1049*4f33bc20Szeertzjq  call delete('Xtest_diff_cursorline_breakindent')
1050*4f33bc20Szeertzjqendfunc
1051*4f33bc20Szeertzjq
1052248fdb33SBram Moolenaarfunc Test_diff_with_syntax()
1053248fdb33SBram Moolenaar  CheckScreendump
1054248fdb33SBram Moolenaar
1055248fdb33SBram Moolenaar  let lines =<< trim END
1056248fdb33SBram Moolenaar  	void doNothing() {
1057248fdb33SBram Moolenaar	   int x = 0;
1058248fdb33SBram Moolenaar	   char *s = "hello";
1059248fdb33SBram Moolenaar	   return 5;
1060248fdb33SBram Moolenaar	}
1061248fdb33SBram Moolenaar  END
1062248fdb33SBram Moolenaar  call writefile(lines, 'Xprogram1.c')
1063248fdb33SBram Moolenaar  let lines =<< trim END
1064248fdb33SBram Moolenaar  	void doSomething() {
1065248fdb33SBram Moolenaar	   int x = 0;
1066248fdb33SBram Moolenaar	   char *s = "there";
1067248fdb33SBram Moolenaar	   return 5;
1068248fdb33SBram Moolenaar	}
1069248fdb33SBram Moolenaar  END
1070248fdb33SBram Moolenaar  call writefile(lines, 'Xprogram2.c')
1071248fdb33SBram Moolenaar
1072248fdb33SBram Moolenaar  let lines =<< trim END
1073248fdb33SBram Moolenaar  	edit Xprogram1.c
1074248fdb33SBram Moolenaar	diffsplit Xprogram2.c
1075248fdb33SBram Moolenaar  END
1076248fdb33SBram Moolenaar  call writefile(lines, 'Xtest_diff_syntax')
1077248fdb33SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_syntax', {})
1078248fdb33SBram Moolenaar
1079248fdb33SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_syntax_1', {})
1080248fdb33SBram Moolenaar
1081248fdb33SBram Moolenaar  " clean up
1082248fdb33SBram Moolenaar  call StopVimInTerminal(buf)
1083248fdb33SBram Moolenaar  call delete('Xtest_diff_syntax')
1084248fdb33SBram Moolenaar  call delete('Xprogram1.c')
1085248fdb33SBram Moolenaar  call delete('Xprogram2.c')
1086248fdb33SBram Moolenaarendfunc
1087248fdb33SBram Moolenaar
1088f7acf2b6SBram Moolenaarfunc Test_diff_of_diff()
10893c8ee629SBram Moolenaar  CheckScreendump
10903c8ee629SBram Moolenaar  CheckFeature rightleft
1091f7acf2b6SBram Moolenaar
1092f7acf2b6SBram Moolenaar  call writefile([
1093f7acf2b6SBram Moolenaar	\ 'call setline(1, ["aa","bb","cc","@@ -3,2 +5,7 @@","dd","ee","ff"])',
1094f7acf2b6SBram Moolenaar	\ 'vnew',
1095f7acf2b6SBram Moolenaar	\ 'call setline(1, ["aa","bb","cc"])',
1096f7acf2b6SBram Moolenaar	\ 'windo diffthis',
10978ee4c01bSBram Moolenaar	\ '1wincmd w',
10988ee4c01bSBram Moolenaar	\ 'setlocal number',
1099f7acf2b6SBram Moolenaar	\ ], 'Xtest_diff_diff')
1100f7acf2b6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_diff', {})
1101f7acf2b6SBram Moolenaar
1102f7acf2b6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_of_diff_01', {})
1103f7acf2b6SBram Moolenaar
1104e73f911cSBram Moolenaar  call term_sendkeys(buf, ":set rightleft\<cr>")
1105e73f911cSBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_of_diff_02', {})
1106e73f911cSBram Moolenaar
1107f7acf2b6SBram Moolenaar  " clean up
1108f7acf2b6SBram Moolenaar  call StopVimInTerminal(buf)
1109f7acf2b6SBram Moolenaar  call delete('Xtest_diff_diff')
1110f7acf2b6SBram Moolenaarendfunc
1111c8234779SBram Moolenaar
1112c8234779SBram Moolenaarfunc CloseoffSetup()
1113c8234779SBram Moolenaar  enew
1114c8234779SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
1115c8234779SBram Moolenaar  diffthis
1116c8234779SBram Moolenaar  new
1117c8234779SBram Moolenaar  call setline(1, ['one', 'tow', 'three'])
1118c8234779SBram Moolenaar  diffthis
1119c8234779SBram Moolenaar  call assert_equal(1, &diff)
1120c8234779SBram Moolenaar  only!
1121c8234779SBram Moolenaarendfunc
1122c8234779SBram Moolenaar
1123c8234779SBram Moolenaarfunc Test_diff_closeoff()
1124c8234779SBram Moolenaar  " "closeoff" included by default: last diff win gets 'diff' reset'
1125c8234779SBram Moolenaar  call CloseoffSetup()
1126c8234779SBram Moolenaar  call assert_equal(0, &diff)
1127c8234779SBram Moolenaar  enew!
1128c8234779SBram Moolenaar
1129c8234779SBram Moolenaar  " "closeoff" excluded: last diff win keeps 'diff' set'
1130c8234779SBram Moolenaar  set diffopt-=closeoff
1131c8234779SBram Moolenaar  call CloseoffSetup()
1132c8234779SBram Moolenaar  call assert_equal(1, &diff)
1133c8234779SBram Moolenaar  diffoff!
1134c8234779SBram Moolenaar  enew!
1135c8234779SBram Moolenaarendfunc
1136f4a1d1c0SBram Moolenaar
11374223d43cSBram Moolenaarfunc Test_diff_followwrap()
11384223d43cSBram Moolenaar  new
11394223d43cSBram Moolenaar  set diffopt+=followwrap
11404223d43cSBram Moolenaar  set wrap
11414223d43cSBram Moolenaar  diffthis
11424223d43cSBram Moolenaar  call assert_equal(1, &wrap)
11434223d43cSBram Moolenaar  diffoff
11444223d43cSBram Moolenaar  set nowrap
11454223d43cSBram Moolenaar  diffthis
11464223d43cSBram Moolenaar  call assert_equal(0, &wrap)
11474223d43cSBram Moolenaar  diffoff
11484223d43cSBram Moolenaar  set diffopt&
11494223d43cSBram Moolenaar  bwipe!
11504223d43cSBram Moolenaarendfunc
11514223d43cSBram Moolenaar
1152f4a1d1c0SBram Moolenaarfunc Test_diff_maintains_change_mark()
1153f4a1d1c0SBram Moolenaar  enew!
1154f4a1d1c0SBram Moolenaar  call setline(1, ['a', 'b', 'c', 'd'])
1155f4a1d1c0SBram Moolenaar  diffthis
1156f4a1d1c0SBram Moolenaar  new
1157f4a1d1c0SBram Moolenaar  call setline(1, ['a', 'b', 'c', 'e'])
1158f4a1d1c0SBram Moolenaar  " Set '[ and '] marks
1159f4a1d1c0SBram Moolenaar  2,3yank
1160f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1161f4a1d1c0SBram Moolenaar  " Verify they aren't affected by the implicit diff
1162f4a1d1c0SBram Moolenaar  diffthis
1163f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1164f4a1d1c0SBram Moolenaar  " Verify they aren't affected by an explicit diff
1165f4a1d1c0SBram Moolenaar  diffupdate
1166f4a1d1c0SBram Moolenaar  call assert_equal([2, 3], [line("'["), line("']")])
1167f4a1d1c0SBram Moolenaar  bwipe!
1168f4a1d1c0SBram Moolenaar  bwipe!
1169f4a1d1c0SBram Moolenaarendfunc
11708dfcce3aSBram Moolenaar
11718dfcce3aSBram Moolenaar" Test for 'patchexpr'
11728dfcce3aSBram Moolenaarfunc Test_patchexpr()
11738dfcce3aSBram Moolenaar  let g:patch_args = []
11748dfcce3aSBram Moolenaar  func TPatch()
11758dfcce3aSBram Moolenaar    call add(g:patch_args, readfile(v:fname_in))
11768dfcce3aSBram Moolenaar    call add(g:patch_args, readfile(v:fname_diff))
11778dfcce3aSBram Moolenaar    call writefile(['output file'], v:fname_out)
11788dfcce3aSBram Moolenaar  endfunc
11798dfcce3aSBram Moolenaar  set patchexpr=TPatch()
11808dfcce3aSBram Moolenaar
11818dfcce3aSBram Moolenaar  call writefile(['input file'], 'Xinput')
11828dfcce3aSBram Moolenaar  call writefile(['diff file'], 'Xdiff')
11838dfcce3aSBram Moolenaar  %bwipe!
11848dfcce3aSBram Moolenaar  edit Xinput
11858dfcce3aSBram Moolenaar  diffpatch Xdiff
11868dfcce3aSBram Moolenaar  call assert_equal('output file', getline(1))
11878dfcce3aSBram Moolenaar  call assert_equal('Xinput.new', bufname())
11888dfcce3aSBram Moolenaar  call assert_equal(2, winnr('$'))
11898dfcce3aSBram Moolenaar  call assert_true(&diff)
11908dfcce3aSBram Moolenaar
11918dfcce3aSBram Moolenaar  call delete('Xinput')
11928dfcce3aSBram Moolenaar  call delete('Xdiff')
11938dfcce3aSBram Moolenaar  set patchexpr&
11948dfcce3aSBram Moolenaar  delfunc TPatch
11958dfcce3aSBram Moolenaar  %bwipe!
11968dfcce3aSBram Moolenaarendfunc
11978dfcce3aSBram Moolenaar
1198511feec6SBram Moolenaarfunc Test_diff_rnu()
1199511feec6SBram Moolenaar  CheckScreendump
1200511feec6SBram Moolenaar
1201511feec6SBram Moolenaar  let content =<< trim END
1202511feec6SBram Moolenaar    call setline(1, ['a', 'a', 'a', 'y', 'b', 'b', 'b', 'b', 'b'])
1203511feec6SBram Moolenaar    vnew
1204511feec6SBram Moolenaar    call setline(1, ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b', 'b', 'b'])
1205511feec6SBram Moolenaar    windo diffthis
1206511feec6SBram Moolenaar    setlocal number rnu foldcolumn=0
1207511feec6SBram Moolenaar  END
1208511feec6SBram Moolenaar  call writefile(content, 'Xtest_diff_rnu')
1209511feec6SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_rnu', {})
1210511feec6SBram Moolenaar
1211511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_01', {})
1212511feec6SBram Moolenaar
1213511feec6SBram Moolenaar  call term_sendkeys(buf, "j")
1214511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_02', {})
1215511feec6SBram Moolenaar  call term_sendkeys(buf, "j")
1216511feec6SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_rnu_03', {})
1217511feec6SBram Moolenaar
1218511feec6SBram Moolenaar  " clean up
1219511feec6SBram Moolenaar  call StopVimInTerminal(buf)
1220511feec6SBram Moolenaar  call delete('Xtest_diff_rnu')
1221511feec6SBram Moolenaarendfunc
1222511feec6SBram Moolenaar
1223fc838d6cSBram Moolenaarfunc Test_diff_multilineconceal()
1224fc838d6cSBram Moolenaar  new
1225fc838d6cSBram Moolenaar  diffthis
1226fc838d6cSBram Moolenaar
1227fc838d6cSBram Moolenaar  new
1228fc838d6cSBram Moolenaar  call matchadd('Conceal', 'a\nb', 9, -1, {'conceal': 'Y'})
1229fc838d6cSBram Moolenaar  set cole=2 cocu=n
1230fc838d6cSBram Moolenaar  call setline(1, ["a", "b"])
1231fc838d6cSBram Moolenaar  diffthis
1232fc838d6cSBram Moolenaar  redraw
1233fc838d6cSBram Moolenaarendfunc
1234fc838d6cSBram Moolenaar
12358455c5edSBram Moolenaarfunc Test_diff_and_scroll()
12368455c5edSBram Moolenaar  " this was causing an ml_get error
12378455c5edSBram Moolenaar  set ls=2
12388455c5edSBram Moolenaar  for i in range(winheight(0) * 2)
12398455c5edSBram Moolenaar    call setline(i, i < winheight(0) - 10 ? i : i + 10)
12408455c5edSBram Moolenaar  endfor
12418455c5edSBram Moolenaar  vnew
12428455c5edSBram Moolenaar  for i in range(winheight(0)*2 + 10)
12438455c5edSBram Moolenaar    call setline(i, i < winheight(0) - 10 ? 0 : i)
12448455c5edSBram Moolenaar  endfor
12458455c5edSBram Moolenaar  diffthis
12468455c5edSBram Moolenaar  wincmd p
12478455c5edSBram Moolenaar  diffthis
12488455c5edSBram Moolenaar  execute 'normal ' . winheight(0) . "\<C-d>"
12498455c5edSBram Moolenaar
12508455c5edSBram Moolenaar  bwipe!
12518455c5edSBram Moolenaar  bwipe!
12528455c5edSBram Moolenaar  set ls&
12538455c5edSBram Moolenaarendfunc
12548455c5edSBram Moolenaar
1255fabc3ca8SBram Moolenaarfunc Test_diff_filler_cursorcolumn()
1256fabc3ca8SBram Moolenaar  CheckScreendump
1257fabc3ca8SBram Moolenaar
1258fabc3ca8SBram Moolenaar  let content =<< trim END
1259fabc3ca8SBram Moolenaar    call setline(1, ['aa', 'bb', 'cc'])
1260fabc3ca8SBram Moolenaar    vnew
1261fabc3ca8SBram Moolenaar    call setline(1, ['aa', 'cc'])
1262fabc3ca8SBram Moolenaar    windo diffthis
1263fabc3ca8SBram Moolenaar    wincmd p
1264fabc3ca8SBram Moolenaar    setlocal cursorcolumn foldcolumn=0
1265fabc3ca8SBram Moolenaar    norm! gg0
1266fabc3ca8SBram Moolenaar    redraw!
1267fabc3ca8SBram Moolenaar  END
1268fabc3ca8SBram Moolenaar  call writefile(content, 'Xtest_diff_cuc')
1269fabc3ca8SBram Moolenaar  let buf = RunVimInTerminal('-S Xtest_diff_cuc', {})
1270fabc3ca8SBram Moolenaar
1271fabc3ca8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_cuc_01', {})
1272fabc3ca8SBram Moolenaar
1273fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "l")
1274fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "\<C-l>")
1275fabc3ca8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_cuc_02', {})
1276fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "0j")
1277fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "\<C-l>")
1278fabc3ca8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_cuc_03', {})
1279fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "l")
1280fabc3ca8SBram Moolenaar  call term_sendkeys(buf, "\<C-l>")
1281fabc3ca8SBram Moolenaar  call VerifyScreenDump(buf, 'Test_diff_cuc_04', {})
1282fabc3ca8SBram Moolenaar
1283fabc3ca8SBram Moolenaar  " clean up
1284fabc3ca8SBram Moolenaar  call StopVimInTerminal(buf)
1285fabc3ca8SBram Moolenaar  call delete('Xtest_diff_cuc')
1286fabc3ca8SBram Moolenaarendfunc
1287fabc3ca8SBram Moolenaar
12883044324eSYegappan Lakshmanan" Test for adding/removing lines inside diff chunks, between diff chunks
12893044324eSYegappan Lakshmanan" and before diff chunks
12903044324eSYegappan Lakshmananfunc Test_diff_modify_chunks()
12913044324eSYegappan Lakshmanan  enew!
12923044324eSYegappan Lakshmanan  let w2_id = win_getid()
12933044324eSYegappan Lakshmanan  call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'])
12943044324eSYegappan Lakshmanan  new
12953044324eSYegappan Lakshmanan  let w1_id = win_getid()
12963044324eSYegappan Lakshmanan  call setline(1, ['a', '2', '3', 'd', 'e', 'f', '7', '8', 'i'])
12973044324eSYegappan Lakshmanan  windo diffthis
12983044324eSYegappan Lakshmanan
12993044324eSYegappan Lakshmanan  " remove a line between two diff chunks and create a new diff chunk
13003044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13013044324eSYegappan Lakshmanan  5d
13023044324eSYegappan Lakshmanan  call win_gotoid(w1_id)
13033044324eSYegappan Lakshmanan  call diff_hlID(5, 1)->synIDattr('name')->assert_equal('DiffAdd')
13043044324eSYegappan Lakshmanan
13053044324eSYegappan Lakshmanan  " add a line between two diff chunks
13063044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13073044324eSYegappan Lakshmanan  normal! 4Goe
13083044324eSYegappan Lakshmanan  call win_gotoid(w1_id)
13093044324eSYegappan Lakshmanan  call diff_hlID(4, 1)->synIDattr('name')->assert_equal('')
13103044324eSYegappan Lakshmanan  call diff_hlID(5, 1)->synIDattr('name')->assert_equal('')
13113044324eSYegappan Lakshmanan
13123044324eSYegappan Lakshmanan  " remove all the lines in a diff chunk.
13133044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13143044324eSYegappan Lakshmanan  7,8d
13153044324eSYegappan Lakshmanan  call win_gotoid(w1_id)
13163044324eSYegappan Lakshmanan  let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')})
13173044324eSYegappan Lakshmanan  call assert_equal(['', 'DiffText', 'DiffText', '', '', '', 'DiffAdd',
13183044324eSYegappan Lakshmanan        \ 'DiffAdd', ''], hl)
13193044324eSYegappan Lakshmanan
13203044324eSYegappan Lakshmanan  " remove lines from one diff chunk to just before the next diff chunk
13213044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13223044324eSYegappan Lakshmanan  call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'])
13233044324eSYegappan Lakshmanan  2,6d
13243044324eSYegappan Lakshmanan  call win_gotoid(w1_id)
13253044324eSYegappan Lakshmanan  let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')})
13263044324eSYegappan Lakshmanan  call assert_equal(['', 'DiffText', 'DiffText', 'DiffAdd', 'DiffAdd',
13273044324eSYegappan Lakshmanan        \ 'DiffAdd', 'DiffAdd', 'DiffAdd', ''], hl)
13283044324eSYegappan Lakshmanan
13293044324eSYegappan Lakshmanan  " remove lines just before the top of a diff chunk
13303044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13313044324eSYegappan Lakshmanan  call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'])
13323044324eSYegappan Lakshmanan  5,6d
13333044324eSYegappan Lakshmanan  call win_gotoid(w1_id)
13343044324eSYegappan Lakshmanan  let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')})
13353044324eSYegappan Lakshmanan  call assert_equal(['', 'DiffText', 'DiffText', '', 'DiffText', 'DiffText',
13363044324eSYegappan Lakshmanan        \ 'DiffAdd', 'DiffAdd', ''], hl)
13373044324eSYegappan Lakshmanan
13383044324eSYegappan Lakshmanan  " remove line after the end of a diff chunk
13393044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13403044324eSYegappan Lakshmanan  call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'])
13413044324eSYegappan Lakshmanan  4d
13423044324eSYegappan Lakshmanan  call win_gotoid(w1_id)
13433044324eSYegappan Lakshmanan  let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')})
13443044324eSYegappan Lakshmanan  call assert_equal(['', 'DiffText', 'DiffText', 'DiffAdd', '', '', 'DiffText',
13453044324eSYegappan Lakshmanan        \ 'DiffText', ''], hl)
13463044324eSYegappan Lakshmanan
13473044324eSYegappan Lakshmanan  " remove lines starting from the end of one diff chunk and ending inside
13483044324eSYegappan Lakshmanan  " another diff chunk
13493044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13503044324eSYegappan Lakshmanan  call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'])
13513044324eSYegappan Lakshmanan  4,7d
13523044324eSYegappan Lakshmanan  call win_gotoid(w1_id)
13533044324eSYegappan Lakshmanan  let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')})
13543044324eSYegappan Lakshmanan  call assert_equal(['', 'DiffText', 'DiffText', 'DiffText', 'DiffAdd',
13553044324eSYegappan Lakshmanan        \ 'DiffAdd', 'DiffAdd', 'DiffAdd', ''], hl)
13563044324eSYegappan Lakshmanan
13573044324eSYegappan Lakshmanan  " removing the only remaining diff chunk should make the files equal
13583044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13593044324eSYegappan Lakshmanan  call setline(1, ['a', '2', '3', 'x', 'd', 'e', 'f', 'x', '7', '8', 'i'])
13603044324eSYegappan Lakshmanan  8d
13613044324eSYegappan Lakshmanan  let hl = range(1, 10)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')})
13623044324eSYegappan Lakshmanan  call assert_equal(['', '', '', 'DiffAdd', '', '', '', '', '', ''], hl)
13633044324eSYegappan Lakshmanan  call win_gotoid(w2_id)
13643044324eSYegappan Lakshmanan  4d
13653044324eSYegappan Lakshmanan  call win_gotoid(w1_id)
13663044324eSYegappan Lakshmanan  let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')})
13673044324eSYegappan Lakshmanan  call assert_equal(['', '', '', '', '', '', '', '', ''], hl)
13683044324eSYegappan Lakshmanan
13693044324eSYegappan Lakshmanan  %bw!
13703044324eSYegappan Lakshmananendfunc
1371ad5c178aSglacambre
13728dfcce3aSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
1373