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