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