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() 848f08b0eb8SBram Moolenaar let g:test_is_flaky = 1 8493c8ee629SBram Moolenaar CheckScreendump 8503c8ee629SBram Moolenaar CheckFeature menu 8513c8ee629SBram Moolenaar 852485b6271SBram Moolenaar let lines =<< trim END 853485b6271SBram Moolenaar func UnifiedDiffExpr() 854485b6271SBram Moolenaar " Prepend some text to check diff type detection 855485b6271SBram Moolenaar call writefile(['warning', ' message'], v:fname_out) 856ad5c178aSglacambre silent exe '!diff -U0 ' .. v:fname_in .. ' ' .. v:fname_new .. '>>' .. v:fname_out 857485b6271SBram Moolenaar endfunc 858485b6271SBram Moolenaar func SetupUnified() 859485b6271SBram Moolenaar set diffexpr=UnifiedDiffExpr() 860ad5c178aSglacambre diffupdate 861485b6271SBram Moolenaar endfunc 862485b6271SBram Moolenaar func StopUnified() 863485b6271SBram Moolenaar set diffexpr= 864485b6271SBram Moolenaar endfunc 865485b6271SBram Moolenaar END 866485b6271SBram Moolenaar call writefile(lines, 'XdiffSetup') 867485b6271SBram Moolenaar 868e828b762SBram Moolenaar " clean up already existing swap files, just in case 869e828b762SBram Moolenaar call delete('.Xfile1.swp') 870e828b762SBram Moolenaar call delete('.Xfile2.swp') 871e828b762SBram Moolenaar 872e828b762SBram Moolenaar " Test 1: Add a line in beginning of file 2 873785fc656SBram 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]) 874485b6271SBram Moolenaar let buf = RunVimInTerminal('-d -S XdiffSetup Xfile1 Xfile2', {}) 8758ee4c01bSBram Moolenaar " Set autoread mode, so that Vim won't complain once we re-write the test 876e828b762SBram Moolenaar " files 877785fc656SBram Moolenaar call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w") 878e828b762SBram Moolenaar 879e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_01', '') 880e828b762SBram Moolenaar 881e828b762SBram Moolenaar " Test 2: Add a line in beginning of file 1 882785fc656SBram 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]) 883e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_02', '') 884e828b762SBram Moolenaar 885e828b762SBram Moolenaar " Test 3: Add a line at the end of file 2 886785fc656SBram 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]) 887e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_03', '') 888e828b762SBram Moolenaar 889e828b762SBram Moolenaar " Test 4: Add a line at the end of file 1 890785fc656SBram 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]) 891e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_04', '') 892e828b762SBram Moolenaar 893e828b762SBram Moolenaar " Test 5: Add a line in the middle of file 2, remove on at the end of file 1 894785fc656SBram 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]) 895e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_05', '') 896e828b762SBram Moolenaar 897e828b762SBram Moolenaar " Test 6: Add a line in the middle of file 1, remove on at the end of file 2 898785fc656SBram 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]) 899e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_06', '') 900e828b762SBram Moolenaar 901b9ddda6cSBram Moolenaar " Variants on test 6 with different context settings 902b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt+=context:2\<cr>") 903b9ddda6cSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_06.2', {}) 904b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt-=context:2\<cr>") 905b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt+=context:1\<cr>") 906b9ddda6cSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_06.1', {}) 907b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt-=context:1\<cr>") 908b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt+=context:0\<cr>") 909b9ddda6cSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_06.0', {}) 910b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt-=context:0\<cr>") 911b9ddda6cSBram Moolenaar 912e828b762SBram Moolenaar " Test 7 - 9: Test normal/patience/histogram diff algorithm 913785fc656SBram Moolenaar call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{', 914e828b762SBram Moolenaar \ ' int i;', ' for(i = 0; i < 10; i++)', ' {', ' printf("Your answer is: ");', 915e828b762SBram Moolenaar \ ' printf("%d\n", foo);', ' }', '}', '', 'int fact(int n)', '{', ' if(n > 1)', ' {', 916e828b762SBram Moolenaar \ ' return fact(n-1) * n;', ' }', ' return 1;', '}', '', 'int main(int argc, char **argv)', 917e828b762SBram Moolenaar \ '{', ' frobnitz(fact(10));', '}'], 918e828b762SBram Moolenaar \ ['#include <stdio.h>', '', 'int fib(int n)', '{', ' if(n > 2)', ' {', 919e828b762SBram Moolenaar \ ' return fib(n-1) + fib(n-2);', ' }', ' return 1;', '}', '', '// Frobs foo heartily', 920e828b762SBram Moolenaar \ 'int frobnitz(int foo)', '{', ' int i;', ' for(i = 0; i < 10; i++)', ' {', 921e828b762SBram Moolenaar \ ' printf("%d\n", foo);', ' }', '}', '', 922e828b762SBram Moolenaar \ 'int main(int argc, char **argv)', '{', ' frobnitz(fib(10));', '}']) 923e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 924e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 925e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_07', {}) 926e828b762SBram Moolenaar 927e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>") 928e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_08', {}) 929e828b762SBram Moolenaar 930e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>") 931e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_09', {}) 932e828b762SBram Moolenaar 933e828b762SBram Moolenaar " Test 10-11: normal/indent-heuristic 934e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt&vim\<cr>") 935785fc656SBram Moolenaar call WriteDiffFiles(buf, ['', ' def finalize(values)', '', ' values.each do |v|', ' v.finalize', ' end'], 936e828b762SBram Moolenaar \ ['', ' def finalize(values)', '', ' values.each do |v|', ' v.prepare', ' end', '', 937e828b762SBram Moolenaar \ ' values.each do |v|', ' v.finalize', ' end']) 938e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 939e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 940e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_10', {}) 941e828b762SBram Moolenaar 942b6fc7285SBram Moolenaar " Leave trailing : at commandline! 943b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>:\<cr>") 944b6fc7285SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_11', {}, 'one') 945b6fc7285SBram Moolenaar " shouldn't matter, if indent-algorithm comes before or after the algorithm 946b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt&\<cr>") 947b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=indent-heuristic,algorithm:patience\<cr>:\<cr>") 948b6fc7285SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_11', {}, 'two') 949b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt&\<cr>") 950b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=algorithm:patience,indent-heuristic\<cr>:\<cr>") 951b6fc7285SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_11', {}, 'three') 952e828b762SBram Moolenaar 953e828b762SBram Moolenaar " Test 12: diff the same file 954785fc656SBram Moolenaar call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 955e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_12', '') 956e828b762SBram Moolenaar 957e828b762SBram Moolenaar " Test 13: diff an empty file 958785fc656SBram Moolenaar call WriteDiffFiles(buf, [], []) 959e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_13', '') 960e828b762SBram Moolenaar 961e828b762SBram Moolenaar " Test 14: test diffopt+=icase 962785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe']) 963e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase") 964e828b762SBram Moolenaar 965e828b762SBram Moolenaar " Test 15-16: test diffopt+=iwhite 966785fc656SBram Moolenaar call WriteDiffFiles(buf, ['int main()', '{', ' printf("Hello, World!");', ' return 0;', '}'], 967e828b762SBram Moolenaar \ ['int main()', '{', ' if (0)', ' {', ' printf("Hello, World!");', ' return 0;', ' }', '}']) 968e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 969e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>") 970e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_15', {}) 971e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 972e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_16', {}) 973e828b762SBram Moolenaar 974785fc656SBram Moolenaar " Test 17: test diffopt+=iblank 975785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy']) 976785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank") 977785fc656SBram Moolenaar 978785fc656SBram Moolenaar " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol 979785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite") 980785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall") 981785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol") 982785fc656SBram Moolenaar 983785fc656SBram Moolenaar " Test 19: test diffopt+=iwhiteeol 984785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar']) 985785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol") 986785fc656SBram Moolenaar 987785fc656SBram Moolenaar " Test 19: test diffopt+=iwhiteall 988785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall") 989785fc656SBram Moolenaar 990e828b762SBram Moolenaar " clean up 991e828b762SBram Moolenaar call StopVimInTerminal(buf) 992e828b762SBram Moolenaar call delete('Xfile1') 993e828b762SBram Moolenaar call delete('Xfile2') 994485b6271SBram Moolenaar call delete('XdiffSetup') 995e828b762SBram Moolenaarendfunc 996e828b762SBram Moolenaar 99704626c24SBram Moolenaarfunc Test_diff_with_scroll_and_change() 99804626c24SBram Moolenaar CheckScreendump 99904626c24SBram Moolenaar 100004626c24SBram Moolenaar let lines =<< trim END 100104626c24SBram Moolenaar call setline(1, range(1, 15)) 100204626c24SBram Moolenaar vnew 100304626c24SBram Moolenaar call setline(1, range(9, 15)) 100404626c24SBram Moolenaar windo diffthis 100504626c24SBram Moolenaar wincmd h 100604626c24SBram Moolenaar exe "normal Gl5\<C-E>" 100704626c24SBram Moolenaar END 100804626c24SBram Moolenaar call writefile(lines, 'Xtest_scroll_change') 100904626c24SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_scroll_change', {}) 101004626c24SBram Moolenaar 101104626c24SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_scroll_change_01', {}) 101204626c24SBram Moolenaar 101304626c24SBram Moolenaar call term_sendkeys(buf, "ax\<Esc>") 101404626c24SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_scroll_change_02', {}) 101504626c24SBram Moolenaar 1016*841c225bSBram Moolenaar call term_sendkeys(buf, "\<C-W>lay\<Esc>") 1017*841c225bSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_scroll_change_03', {}) 1018*841c225bSBram Moolenaar 101904626c24SBram Moolenaar " clean up 102004626c24SBram Moolenaar call StopVimInTerminal(buf) 102104626c24SBram Moolenaar call delete('Xtest_scroll_change') 102204626c24SBram Moolenaarendfunc 102304626c24SBram Moolenaar 10244a5abbd6SBram Moolenaarfunc Test_diff_with_cursorline() 10253c8ee629SBram Moolenaar CheckScreendump 10264a5abbd6SBram Moolenaar 10274a5abbd6SBram Moolenaar call writefile([ 10284a5abbd6SBram Moolenaar \ 'hi CursorLine ctermbg=red ctermfg=white', 10294a5abbd6SBram Moolenaar \ 'set cursorline', 10304a5abbd6SBram Moolenaar \ 'call setline(1, ["foo","foo","foo","bar"])', 10314a5abbd6SBram Moolenaar \ 'vnew', 10324a5abbd6SBram Moolenaar \ 'call setline(1, ["bee","foo","foo","baz"])', 10334a5abbd6SBram Moolenaar \ 'windo diffthis', 10344a5abbd6SBram Moolenaar \ '2wincmd w', 10354a5abbd6SBram Moolenaar \ ], 'Xtest_diff_cursorline') 10364a5abbd6SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {}) 10374a5abbd6SBram Moolenaar 10384a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {}) 10394a5abbd6SBram Moolenaar call term_sendkeys(buf, "j") 10404a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {}) 10414a5abbd6SBram Moolenaar call term_sendkeys(buf, "j") 10424a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {}) 10434a5abbd6SBram Moolenaar 10444a5abbd6SBram Moolenaar " clean up 10454a5abbd6SBram Moolenaar call StopVimInTerminal(buf) 10464a5abbd6SBram Moolenaar call delete('Xtest_diff_cursorline') 10474a5abbd6SBram Moolenaarendfunc 1048f7acf2b6SBram Moolenaar 10494f33bc20Szeertzjqfunc Test_diff_with_cursorline_breakindent() 10504f33bc20Szeertzjq CheckScreendump 10514f33bc20Szeertzjq 10524f33bc20Szeertzjq call writefile([ 10534f33bc20Szeertzjq \ 'hi CursorLine ctermbg=red ctermfg=white', 10544f33bc20Szeertzjq \ 'set noequalalways wrap diffopt=followwrap cursorline breakindent', 10554f33bc20Szeertzjq \ '50vnew', 10564f33bc20Szeertzjq \ 'call setline(1, [" "," "," "," "])', 10574f33bc20Szeertzjq \ 'exe "norm 20Afoo\<Esc>j20Afoo\<Esc>j20Afoo\<Esc>j20Abar\<Esc>"', 10584f33bc20Szeertzjq \ 'vnew', 10594f33bc20Szeertzjq \ 'call setline(1, [" "," "," "," "])', 10604f33bc20Szeertzjq \ 'exe "norm 20Abee\<Esc>j20Afoo\<Esc>j20Afoo\<Esc>j20Abaz\<Esc>"', 10614f33bc20Szeertzjq \ 'windo diffthis', 10624f33bc20Szeertzjq \ '2wincmd w', 10634f33bc20Szeertzjq \ ], 'Xtest_diff_cursorline_breakindent') 10644f33bc20Szeertzjq let buf = RunVimInTerminal('-S Xtest_diff_cursorline_breakindent', {}) 10654f33bc20Szeertzjq 10664f33bc20Szeertzjq call term_sendkeys(buf, "gg0") 10674f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_diff_with_cul_bri_01', {}) 10684f33bc20Szeertzjq call term_sendkeys(buf, "j") 10694f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_diff_with_cul_bri_02', {}) 10704f33bc20Szeertzjq call term_sendkeys(buf, "j") 10714f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_diff_with_cul_bri_03', {}) 10724f33bc20Szeertzjq call term_sendkeys(buf, "j") 10734f33bc20Szeertzjq call VerifyScreenDump(buf, 'Test_diff_with_cul_bri_04', {}) 10744f33bc20Szeertzjq 10754f33bc20Szeertzjq " clean up 10764f33bc20Szeertzjq call StopVimInTerminal(buf) 10774f33bc20Szeertzjq call delete('Xtest_diff_cursorline_breakindent') 10784f33bc20Szeertzjqendfunc 10794f33bc20Szeertzjq 1080248fdb33SBram Moolenaarfunc Test_diff_with_syntax() 1081248fdb33SBram Moolenaar CheckScreendump 1082248fdb33SBram Moolenaar 1083248fdb33SBram Moolenaar let lines =<< trim END 1084248fdb33SBram Moolenaar void doNothing() { 1085248fdb33SBram Moolenaar int x = 0; 1086248fdb33SBram Moolenaar char *s = "hello"; 1087248fdb33SBram Moolenaar return 5; 1088248fdb33SBram Moolenaar } 1089248fdb33SBram Moolenaar END 1090248fdb33SBram Moolenaar call writefile(lines, 'Xprogram1.c') 1091248fdb33SBram Moolenaar let lines =<< trim END 1092248fdb33SBram Moolenaar void doSomething() { 1093248fdb33SBram Moolenaar int x = 0; 1094248fdb33SBram Moolenaar char *s = "there"; 1095248fdb33SBram Moolenaar return 5; 1096248fdb33SBram Moolenaar } 1097248fdb33SBram Moolenaar END 1098248fdb33SBram Moolenaar call writefile(lines, 'Xprogram2.c') 1099248fdb33SBram Moolenaar 1100248fdb33SBram Moolenaar let lines =<< trim END 1101248fdb33SBram Moolenaar edit Xprogram1.c 1102248fdb33SBram Moolenaar diffsplit Xprogram2.c 1103248fdb33SBram Moolenaar END 1104248fdb33SBram Moolenaar call writefile(lines, 'Xtest_diff_syntax') 1105248fdb33SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_syntax', {}) 1106248fdb33SBram Moolenaar 1107248fdb33SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_syntax_1', {}) 1108248fdb33SBram Moolenaar 1109248fdb33SBram Moolenaar " clean up 1110248fdb33SBram Moolenaar call StopVimInTerminal(buf) 1111248fdb33SBram Moolenaar call delete('Xtest_diff_syntax') 1112248fdb33SBram Moolenaar call delete('Xprogram1.c') 1113248fdb33SBram Moolenaar call delete('Xprogram2.c') 1114248fdb33SBram Moolenaarendfunc 1115248fdb33SBram Moolenaar 1116f7acf2b6SBram Moolenaarfunc Test_diff_of_diff() 11173c8ee629SBram Moolenaar CheckScreendump 11183c8ee629SBram Moolenaar CheckFeature rightleft 1119f7acf2b6SBram Moolenaar 1120f7acf2b6SBram Moolenaar call writefile([ 1121f7acf2b6SBram Moolenaar \ 'call setline(1, ["aa","bb","cc","@@ -3,2 +5,7 @@","dd","ee","ff"])', 1122f7acf2b6SBram Moolenaar \ 'vnew', 1123f7acf2b6SBram Moolenaar \ 'call setline(1, ["aa","bb","cc"])', 1124f7acf2b6SBram Moolenaar \ 'windo diffthis', 11258ee4c01bSBram Moolenaar \ '1wincmd w', 11268ee4c01bSBram Moolenaar \ 'setlocal number', 1127f7acf2b6SBram Moolenaar \ ], 'Xtest_diff_diff') 1128f7acf2b6SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_diff', {}) 1129f7acf2b6SBram Moolenaar 1130f7acf2b6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_of_diff_01', {}) 1131f7acf2b6SBram Moolenaar 1132e73f911cSBram Moolenaar call term_sendkeys(buf, ":set rightleft\<cr>") 1133e73f911cSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_of_diff_02', {}) 1134e73f911cSBram Moolenaar 1135f7acf2b6SBram Moolenaar " clean up 1136f7acf2b6SBram Moolenaar call StopVimInTerminal(buf) 1137f7acf2b6SBram Moolenaar call delete('Xtest_diff_diff') 1138f7acf2b6SBram Moolenaarendfunc 1139c8234779SBram Moolenaar 1140c8234779SBram Moolenaarfunc CloseoffSetup() 1141c8234779SBram Moolenaar enew 1142c8234779SBram Moolenaar call setline(1, ['one', 'two', 'three']) 1143c8234779SBram Moolenaar diffthis 1144c8234779SBram Moolenaar new 1145c8234779SBram Moolenaar call setline(1, ['one', 'tow', 'three']) 1146c8234779SBram Moolenaar diffthis 1147c8234779SBram Moolenaar call assert_equal(1, &diff) 1148c8234779SBram Moolenaar only! 1149c8234779SBram Moolenaarendfunc 1150c8234779SBram Moolenaar 1151c8234779SBram Moolenaarfunc Test_diff_closeoff() 1152c8234779SBram Moolenaar " "closeoff" included by default: last diff win gets 'diff' reset' 1153c8234779SBram Moolenaar call CloseoffSetup() 1154c8234779SBram Moolenaar call assert_equal(0, &diff) 1155c8234779SBram Moolenaar enew! 1156c8234779SBram Moolenaar 1157c8234779SBram Moolenaar " "closeoff" excluded: last diff win keeps 'diff' set' 1158c8234779SBram Moolenaar set diffopt-=closeoff 1159c8234779SBram Moolenaar call CloseoffSetup() 1160c8234779SBram Moolenaar call assert_equal(1, &diff) 1161c8234779SBram Moolenaar diffoff! 1162c8234779SBram Moolenaar enew! 1163c8234779SBram Moolenaarendfunc 1164f4a1d1c0SBram Moolenaar 11654223d43cSBram Moolenaarfunc Test_diff_followwrap() 11664223d43cSBram Moolenaar new 11674223d43cSBram Moolenaar set diffopt+=followwrap 11684223d43cSBram Moolenaar set wrap 11694223d43cSBram Moolenaar diffthis 11704223d43cSBram Moolenaar call assert_equal(1, &wrap) 11714223d43cSBram Moolenaar diffoff 11724223d43cSBram Moolenaar set nowrap 11734223d43cSBram Moolenaar diffthis 11744223d43cSBram Moolenaar call assert_equal(0, &wrap) 11754223d43cSBram Moolenaar diffoff 11764223d43cSBram Moolenaar set diffopt& 11774223d43cSBram Moolenaar bwipe! 11784223d43cSBram Moolenaarendfunc 11794223d43cSBram Moolenaar 1180f4a1d1c0SBram Moolenaarfunc Test_diff_maintains_change_mark() 1181f4a1d1c0SBram Moolenaar enew! 1182f4a1d1c0SBram Moolenaar call setline(1, ['a', 'b', 'c', 'd']) 1183f4a1d1c0SBram Moolenaar diffthis 1184f4a1d1c0SBram Moolenaar new 1185f4a1d1c0SBram Moolenaar call setline(1, ['a', 'b', 'c', 'e']) 1186f4a1d1c0SBram Moolenaar " Set '[ and '] marks 1187f4a1d1c0SBram Moolenaar 2,3yank 1188f4a1d1c0SBram Moolenaar call assert_equal([2, 3], [line("'["), line("']")]) 1189f4a1d1c0SBram Moolenaar " Verify they aren't affected by the implicit diff 1190f4a1d1c0SBram Moolenaar diffthis 1191f4a1d1c0SBram Moolenaar call assert_equal([2, 3], [line("'["), line("']")]) 1192f4a1d1c0SBram Moolenaar " Verify they aren't affected by an explicit diff 1193f4a1d1c0SBram Moolenaar diffupdate 1194f4a1d1c0SBram Moolenaar call assert_equal([2, 3], [line("'["), line("']")]) 1195f4a1d1c0SBram Moolenaar bwipe! 1196f4a1d1c0SBram Moolenaar bwipe! 1197f4a1d1c0SBram Moolenaarendfunc 11988dfcce3aSBram Moolenaar 11998dfcce3aSBram Moolenaar" Test for 'patchexpr' 12008dfcce3aSBram Moolenaarfunc Test_patchexpr() 12018dfcce3aSBram Moolenaar let g:patch_args = [] 12028dfcce3aSBram Moolenaar func TPatch() 12038dfcce3aSBram Moolenaar call add(g:patch_args, readfile(v:fname_in)) 12048dfcce3aSBram Moolenaar call add(g:patch_args, readfile(v:fname_diff)) 12058dfcce3aSBram Moolenaar call writefile(['output file'], v:fname_out) 12068dfcce3aSBram Moolenaar endfunc 12078dfcce3aSBram Moolenaar set patchexpr=TPatch() 12088dfcce3aSBram Moolenaar 12098dfcce3aSBram Moolenaar call writefile(['input file'], 'Xinput') 12108dfcce3aSBram Moolenaar call writefile(['diff file'], 'Xdiff') 12118dfcce3aSBram Moolenaar %bwipe! 12128dfcce3aSBram Moolenaar edit Xinput 12138dfcce3aSBram Moolenaar diffpatch Xdiff 12148dfcce3aSBram Moolenaar call assert_equal('output file', getline(1)) 12158dfcce3aSBram Moolenaar call assert_equal('Xinput.new', bufname()) 12168dfcce3aSBram Moolenaar call assert_equal(2, winnr('$')) 12178dfcce3aSBram Moolenaar call assert_true(&diff) 12188dfcce3aSBram Moolenaar 12198dfcce3aSBram Moolenaar call delete('Xinput') 12208dfcce3aSBram Moolenaar call delete('Xdiff') 12218dfcce3aSBram Moolenaar set patchexpr& 12228dfcce3aSBram Moolenaar delfunc TPatch 12238dfcce3aSBram Moolenaar %bwipe! 12248dfcce3aSBram Moolenaarendfunc 12258dfcce3aSBram Moolenaar 1226511feec6SBram Moolenaarfunc Test_diff_rnu() 1227511feec6SBram Moolenaar CheckScreendump 1228511feec6SBram Moolenaar 1229511feec6SBram Moolenaar let content =<< trim END 1230511feec6SBram Moolenaar call setline(1, ['a', 'a', 'a', 'y', 'b', 'b', 'b', 'b', 'b']) 1231511feec6SBram Moolenaar vnew 1232511feec6SBram Moolenaar call setline(1, ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b', 'b', 'b']) 1233511feec6SBram Moolenaar windo diffthis 1234511feec6SBram Moolenaar setlocal number rnu foldcolumn=0 1235511feec6SBram Moolenaar END 1236511feec6SBram Moolenaar call writefile(content, 'Xtest_diff_rnu') 1237511feec6SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_rnu', {}) 1238511feec6SBram Moolenaar 1239511feec6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_rnu_01', {}) 1240511feec6SBram Moolenaar 1241511feec6SBram Moolenaar call term_sendkeys(buf, "j") 1242511feec6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_rnu_02', {}) 1243511feec6SBram Moolenaar call term_sendkeys(buf, "j") 1244511feec6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_rnu_03', {}) 1245511feec6SBram Moolenaar 1246511feec6SBram Moolenaar " clean up 1247511feec6SBram Moolenaar call StopVimInTerminal(buf) 1248511feec6SBram Moolenaar call delete('Xtest_diff_rnu') 1249511feec6SBram Moolenaarendfunc 1250511feec6SBram Moolenaar 1251fc838d6cSBram Moolenaarfunc Test_diff_multilineconceal() 1252fc838d6cSBram Moolenaar new 1253fc838d6cSBram Moolenaar diffthis 1254fc838d6cSBram Moolenaar 1255fc838d6cSBram Moolenaar new 1256fc838d6cSBram Moolenaar call matchadd('Conceal', 'a\nb', 9, -1, {'conceal': 'Y'}) 1257fc838d6cSBram Moolenaar set cole=2 cocu=n 1258fc838d6cSBram Moolenaar call setline(1, ["a", "b"]) 1259fc838d6cSBram Moolenaar diffthis 1260fc838d6cSBram Moolenaar redraw 1261fc838d6cSBram Moolenaarendfunc 1262fc838d6cSBram Moolenaar 12638455c5edSBram Moolenaarfunc Test_diff_and_scroll() 12648455c5edSBram Moolenaar " this was causing an ml_get error 12658455c5edSBram Moolenaar set ls=2 12668455c5edSBram Moolenaar for i in range(winheight(0) * 2) 12678455c5edSBram Moolenaar call setline(i, i < winheight(0) - 10 ? i : i + 10) 12688455c5edSBram Moolenaar endfor 12698455c5edSBram Moolenaar vnew 12708455c5edSBram Moolenaar for i in range(winheight(0)*2 + 10) 12718455c5edSBram Moolenaar call setline(i, i < winheight(0) - 10 ? 0 : i) 12728455c5edSBram Moolenaar endfor 12738455c5edSBram Moolenaar diffthis 12748455c5edSBram Moolenaar wincmd p 12758455c5edSBram Moolenaar diffthis 12768455c5edSBram Moolenaar execute 'normal ' . winheight(0) . "\<C-d>" 12778455c5edSBram Moolenaar 12788455c5edSBram Moolenaar bwipe! 12798455c5edSBram Moolenaar bwipe! 12808455c5edSBram Moolenaar set ls& 12818455c5edSBram Moolenaarendfunc 12828455c5edSBram Moolenaar 1283fabc3ca8SBram Moolenaarfunc Test_diff_filler_cursorcolumn() 1284fabc3ca8SBram Moolenaar CheckScreendump 1285fabc3ca8SBram Moolenaar 1286fabc3ca8SBram Moolenaar let content =<< trim END 1287fabc3ca8SBram Moolenaar call setline(1, ['aa', 'bb', 'cc']) 1288fabc3ca8SBram Moolenaar vnew 1289fabc3ca8SBram Moolenaar call setline(1, ['aa', 'cc']) 1290fabc3ca8SBram Moolenaar windo diffthis 1291fabc3ca8SBram Moolenaar wincmd p 1292fabc3ca8SBram Moolenaar setlocal cursorcolumn foldcolumn=0 1293fabc3ca8SBram Moolenaar norm! gg0 1294fabc3ca8SBram Moolenaar redraw! 1295fabc3ca8SBram Moolenaar END 1296fabc3ca8SBram Moolenaar call writefile(content, 'Xtest_diff_cuc') 1297fabc3ca8SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_cuc', {}) 1298fabc3ca8SBram Moolenaar 1299fabc3ca8SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_cuc_01', {}) 1300fabc3ca8SBram Moolenaar 1301fabc3ca8SBram Moolenaar call term_sendkeys(buf, "l") 1302fabc3ca8SBram Moolenaar call term_sendkeys(buf, "\<C-l>") 1303fabc3ca8SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_cuc_02', {}) 1304fabc3ca8SBram Moolenaar call term_sendkeys(buf, "0j") 1305fabc3ca8SBram Moolenaar call term_sendkeys(buf, "\<C-l>") 1306fabc3ca8SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_cuc_03', {}) 1307fabc3ca8SBram Moolenaar call term_sendkeys(buf, "l") 1308fabc3ca8SBram Moolenaar call term_sendkeys(buf, "\<C-l>") 1309fabc3ca8SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_cuc_04', {}) 1310fabc3ca8SBram Moolenaar 1311fabc3ca8SBram Moolenaar " clean up 1312fabc3ca8SBram Moolenaar call StopVimInTerminal(buf) 1313fabc3ca8SBram Moolenaar call delete('Xtest_diff_cuc') 1314fabc3ca8SBram Moolenaarendfunc 1315fabc3ca8SBram Moolenaar 13163044324eSYegappan Lakshmanan" Test for adding/removing lines inside diff chunks, between diff chunks 13173044324eSYegappan Lakshmanan" and before diff chunks 13183044324eSYegappan Lakshmananfunc Test_diff_modify_chunks() 13193044324eSYegappan Lakshmanan enew! 13203044324eSYegappan Lakshmanan let w2_id = win_getid() 13213044324eSYegappan Lakshmanan call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']) 13223044324eSYegappan Lakshmanan new 13233044324eSYegappan Lakshmanan let w1_id = win_getid() 13243044324eSYegappan Lakshmanan call setline(1, ['a', '2', '3', 'd', 'e', 'f', '7', '8', 'i']) 13253044324eSYegappan Lakshmanan windo diffthis 13263044324eSYegappan Lakshmanan 13273044324eSYegappan Lakshmanan " remove a line between two diff chunks and create a new diff chunk 13283044324eSYegappan Lakshmanan call win_gotoid(w2_id) 13293044324eSYegappan Lakshmanan 5d 13303044324eSYegappan Lakshmanan call win_gotoid(w1_id) 13313044324eSYegappan Lakshmanan call diff_hlID(5, 1)->synIDattr('name')->assert_equal('DiffAdd') 13323044324eSYegappan Lakshmanan 13333044324eSYegappan Lakshmanan " add a line between two diff chunks 13343044324eSYegappan Lakshmanan call win_gotoid(w2_id) 13353044324eSYegappan Lakshmanan normal! 4Goe 13363044324eSYegappan Lakshmanan call win_gotoid(w1_id) 13373044324eSYegappan Lakshmanan call diff_hlID(4, 1)->synIDattr('name')->assert_equal('') 13383044324eSYegappan Lakshmanan call diff_hlID(5, 1)->synIDattr('name')->assert_equal('') 13393044324eSYegappan Lakshmanan 13403044324eSYegappan Lakshmanan " remove all the lines in a diff chunk. 13413044324eSYegappan Lakshmanan call win_gotoid(w2_id) 13423044324eSYegappan Lakshmanan 7,8d 13433044324eSYegappan Lakshmanan call win_gotoid(w1_id) 13443044324eSYegappan Lakshmanan let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')}) 13453044324eSYegappan Lakshmanan call assert_equal(['', 'DiffText', 'DiffText', '', '', '', 'DiffAdd', 13463044324eSYegappan Lakshmanan \ 'DiffAdd', ''], hl) 13473044324eSYegappan Lakshmanan 13483044324eSYegappan Lakshmanan " remove lines from one diff chunk to just before the next 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 2,6d 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', 'DiffAdd', 'DiffAdd', 13553044324eSYegappan Lakshmanan \ 'DiffAdd', 'DiffAdd', 'DiffAdd', ''], hl) 13563044324eSYegappan Lakshmanan 13573044324eSYegappan Lakshmanan " remove lines just before the top of a diff chunk 13583044324eSYegappan Lakshmanan call win_gotoid(w2_id) 13593044324eSYegappan Lakshmanan call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']) 13603044324eSYegappan Lakshmanan 5,6d 13613044324eSYegappan Lakshmanan call win_gotoid(w1_id) 13623044324eSYegappan Lakshmanan let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')}) 13633044324eSYegappan Lakshmanan call assert_equal(['', 'DiffText', 'DiffText', '', 'DiffText', 'DiffText', 13643044324eSYegappan Lakshmanan \ 'DiffAdd', 'DiffAdd', ''], hl) 13653044324eSYegappan Lakshmanan 13663044324eSYegappan Lakshmanan " remove line after the end of a diff chunk 13673044324eSYegappan Lakshmanan call win_gotoid(w2_id) 13683044324eSYegappan Lakshmanan call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']) 13693044324eSYegappan Lakshmanan 4d 13703044324eSYegappan Lakshmanan call win_gotoid(w1_id) 13713044324eSYegappan Lakshmanan let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')}) 13723044324eSYegappan Lakshmanan call assert_equal(['', 'DiffText', 'DiffText', 'DiffAdd', '', '', 'DiffText', 13733044324eSYegappan Lakshmanan \ 'DiffText', ''], hl) 13743044324eSYegappan Lakshmanan 13753044324eSYegappan Lakshmanan " remove lines starting from the end of one diff chunk and ending inside 13763044324eSYegappan Lakshmanan " another diff chunk 13773044324eSYegappan Lakshmanan call win_gotoid(w2_id) 13783044324eSYegappan Lakshmanan call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']) 13793044324eSYegappan Lakshmanan 4,7d 13803044324eSYegappan Lakshmanan call win_gotoid(w1_id) 13813044324eSYegappan Lakshmanan let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')}) 13823044324eSYegappan Lakshmanan call assert_equal(['', 'DiffText', 'DiffText', 'DiffText', 'DiffAdd', 13833044324eSYegappan Lakshmanan \ 'DiffAdd', 'DiffAdd', 'DiffAdd', ''], hl) 13843044324eSYegappan Lakshmanan 13853044324eSYegappan Lakshmanan " removing the only remaining diff chunk should make the files equal 13863044324eSYegappan Lakshmanan call win_gotoid(w2_id) 13873044324eSYegappan Lakshmanan call setline(1, ['a', '2', '3', 'x', 'd', 'e', 'f', 'x', '7', '8', 'i']) 13883044324eSYegappan Lakshmanan 8d 13893044324eSYegappan Lakshmanan let hl = range(1, 10)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')}) 13903044324eSYegappan Lakshmanan call assert_equal(['', '', '', 'DiffAdd', '', '', '', '', '', ''], hl) 13913044324eSYegappan Lakshmanan call win_gotoid(w2_id) 13923044324eSYegappan Lakshmanan 4d 13933044324eSYegappan Lakshmanan call win_gotoid(w1_id) 13943044324eSYegappan Lakshmanan let hl = range(1, 9)->map({_, lnum -> diff_hlID(lnum, 1)->synIDattr('name')}) 13953044324eSYegappan Lakshmanan call assert_equal(['', '', '', '', '', '', '', '', ''], hl) 13963044324eSYegappan Lakshmanan 13973044324eSYegappan Lakshmanan %bw! 13983044324eSYegappan Lakshmananendfunc 1399ad5c178aSglacambre 14008dfcce3aSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1401