142093c0eSBram Moolenaar" Tests for diff mode 2e828b762SBram Moolenaarsource shared.vim 3e828b762SBram Moolenaarsource screendump.vim 442093c0eSBram Moolenaar 542093c0eSBram Moolenaarfunc Test_diff_fold_sync() 642093c0eSBram Moolenaar enew! 7e8fa05b5SBram Moolenaar let g:update_count = 0 8e8fa05b5SBram Moolenaar au DiffUpdated * let g:update_count += 1 9e8fa05b5SBram Moolenaar 1042093c0eSBram Moolenaar let l = range(50) 1142093c0eSBram Moolenaar call setline(1, l) 1242093c0eSBram Moolenaar diffthis 1342093c0eSBram Moolenaar let winone = win_getid() 1442093c0eSBram Moolenaar new 1542093c0eSBram Moolenaar let l[25] = 'diff' 1642093c0eSBram Moolenaar call setline(1, l) 1742093c0eSBram Moolenaar diffthis 1842093c0eSBram Moolenaar let wintwo = win_getid() 1942093c0eSBram Moolenaar " line 15 is inside the closed fold 2042093c0eSBram Moolenaar call assert_equal(19, foldclosedend(10)) 2142093c0eSBram Moolenaar call win_gotoid(winone) 2242093c0eSBram Moolenaar call assert_equal(19, foldclosedend(10)) 2342093c0eSBram Moolenaar " open the fold 2442093c0eSBram Moolenaar normal zv 2542093c0eSBram Moolenaar call assert_equal(-1, foldclosedend(10)) 2642093c0eSBram Moolenaar " fold in other window must have opened too 2742093c0eSBram Moolenaar call win_gotoid(wintwo) 2842093c0eSBram Moolenaar call assert_equal(-1, foldclosedend(10)) 2942093c0eSBram Moolenaar 3042093c0eSBram Moolenaar " cursor position is in sync 3142093c0eSBram Moolenaar normal 23G 3242093c0eSBram Moolenaar call win_gotoid(winone) 3342093c0eSBram Moolenaar call assert_equal(23, getcurpos()[1]) 3442093c0eSBram Moolenaar 35e8fa05b5SBram Moolenaar call assert_equal(1, g:update_count) 36e8fa05b5SBram Moolenaar au! DiffUpdated 37e8fa05b5SBram Moolenaar 3842093c0eSBram Moolenaar windo diffoff 3942093c0eSBram Moolenaar close! 4042093c0eSBram Moolenaar set nomodified 4142093c0eSBram Moolenaarendfunc 4242093c0eSBram Moolenaar 4342093c0eSBram Moolenaarfunc Test_vert_split() 44e828b762SBram Moolenaar set diffopt=filler 45e828b762SBram Moolenaar call Common_vert_split() 46e828b762SBram Moolenaar set diffopt& 47e828b762SBram Moolenaarendfunc 48e828b762SBram Moolenaar 49e828b762SBram Moolenaarfunc Test_vert_split_internal() 50e828b762SBram Moolenaar set diffopt=internal,filler 51e828b762SBram Moolenaar call Common_vert_split() 52e828b762SBram Moolenaar set diffopt& 53e828b762SBram Moolenaarendfunc 54e828b762SBram Moolenaar 55e828b762SBram Moolenaarfunc Common_vert_split() 5642093c0eSBram Moolenaar " Disable the title to avoid xterm keeping the wrong one. 5742093c0eSBram Moolenaar set notitle noicon 5842093c0eSBram Moolenaar new 5942093c0eSBram Moolenaar let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee'] 6042093c0eSBram Moolenaar call setline(1, l) 6142093c0eSBram Moolenaar w! Xtest 6242093c0eSBram Moolenaar normal dd 6342093c0eSBram Moolenaar $ 6442093c0eSBram Moolenaar put 6542093c0eSBram Moolenaar normal kkrXoxxx 6642093c0eSBram Moolenaar w! Xtest2 6742093c0eSBram Moolenaar file Nop 6842093c0eSBram Moolenaar normal ggoyyyjjjozzzz 6942093c0eSBram Moolenaar set foldmethod=marker foldcolumn=4 7042093c0eSBram Moolenaar call assert_equal(0, &diff) 7142093c0eSBram Moolenaar call assert_equal('marker', &foldmethod) 7242093c0eSBram Moolenaar call assert_equal(4, &foldcolumn) 7342093c0eSBram Moolenaar call assert_equal(0, &scrollbind) 7442093c0eSBram Moolenaar call assert_equal(0, &cursorbind) 7542093c0eSBram Moolenaar call assert_equal(1, &wrap) 7642093c0eSBram Moolenaar 7742093c0eSBram Moolenaar vert diffsplit Xtest 7842093c0eSBram Moolenaar vert diffsplit Xtest2 7942093c0eSBram Moolenaar call assert_equal(1, &diff) 8042093c0eSBram Moolenaar call assert_equal('diff', &foldmethod) 8142093c0eSBram Moolenaar call assert_equal(2, &foldcolumn) 8242093c0eSBram Moolenaar call assert_equal(1, &scrollbind) 8342093c0eSBram Moolenaar call assert_equal(1, &cursorbind) 8442093c0eSBram Moolenaar call assert_equal(0, &wrap) 8542093c0eSBram Moolenaar 8642093c0eSBram Moolenaar let diff_fdm = &fdm 8742093c0eSBram Moolenaar let diff_fdc = &fdc 8842093c0eSBram Moolenaar " repeat entering diff mode here to see if this saves the wrong settings 8942093c0eSBram Moolenaar diffthis 9042093c0eSBram Moolenaar " jump to second window for a moment to have filler line appear at start of 9142093c0eSBram Moolenaar " first window 9242093c0eSBram Moolenaar wincmd w 9342093c0eSBram Moolenaar normal gg 9442093c0eSBram Moolenaar wincmd p 9542093c0eSBram Moolenaar normal gg 9642093c0eSBram Moolenaar call assert_equal(2, winline()) 9742093c0eSBram Moolenaar normal j 9842093c0eSBram Moolenaar call assert_equal(4, winline()) 9942093c0eSBram Moolenaar normal j 10042093c0eSBram Moolenaar call assert_equal(5, winline()) 10142093c0eSBram Moolenaar normal j 10242093c0eSBram Moolenaar call assert_equal(6, winline()) 10342093c0eSBram Moolenaar normal j 10442093c0eSBram Moolenaar call assert_equal(8, winline()) 10542093c0eSBram Moolenaar normal j 10642093c0eSBram Moolenaar call assert_equal(9, winline()) 10742093c0eSBram Moolenaar 10842093c0eSBram Moolenaar wincmd w 10942093c0eSBram Moolenaar normal gg 11042093c0eSBram Moolenaar call assert_equal(1, winline()) 11142093c0eSBram Moolenaar normal j 11242093c0eSBram Moolenaar call assert_equal(2, winline()) 11342093c0eSBram Moolenaar normal j 11442093c0eSBram Moolenaar call assert_equal(4, winline()) 11542093c0eSBram Moolenaar normal j 11642093c0eSBram Moolenaar call assert_equal(5, winline()) 11742093c0eSBram Moolenaar normal j 11842093c0eSBram Moolenaar call assert_equal(8, winline()) 11942093c0eSBram Moolenaar 12042093c0eSBram Moolenaar wincmd w 12142093c0eSBram Moolenaar normal gg 12242093c0eSBram Moolenaar call assert_equal(2, winline()) 12342093c0eSBram Moolenaar normal j 12442093c0eSBram Moolenaar call assert_equal(3, winline()) 12542093c0eSBram Moolenaar normal j 12642093c0eSBram Moolenaar call assert_equal(4, winline()) 12742093c0eSBram Moolenaar normal j 12842093c0eSBram Moolenaar call assert_equal(5, winline()) 12942093c0eSBram Moolenaar normal j 13042093c0eSBram Moolenaar call assert_equal(6, winline()) 13142093c0eSBram Moolenaar normal j 13242093c0eSBram Moolenaar call assert_equal(7, winline()) 13342093c0eSBram Moolenaar normal j 13442093c0eSBram Moolenaar call assert_equal(8, winline()) 13542093c0eSBram Moolenaar 13642093c0eSBram Moolenaar " Test diffoff 13742093c0eSBram Moolenaar diffoff! 13842093c0eSBram Moolenaar 1wincmd 2 13942093c0eSBram Moolenaar let &diff = 1 14042093c0eSBram Moolenaar let &fdm = diff_fdm 14142093c0eSBram Moolenaar let &fdc = diff_fdc 14242093c0eSBram Moolenaar 4wincmd w 14342093c0eSBram Moolenaar diffoff! 14442093c0eSBram Moolenaar 1wincmd w 14542093c0eSBram Moolenaar call assert_equal(0, &diff) 14642093c0eSBram Moolenaar call assert_equal('marker', &foldmethod) 14742093c0eSBram Moolenaar call assert_equal(4, &foldcolumn) 14842093c0eSBram Moolenaar call assert_equal(0, &scrollbind) 14942093c0eSBram Moolenaar call assert_equal(0, &cursorbind) 15042093c0eSBram Moolenaar call assert_equal(1, &wrap) 15142093c0eSBram Moolenaar 15242093c0eSBram Moolenaar wincmd w 15342093c0eSBram Moolenaar call assert_equal(0, &diff) 15442093c0eSBram Moolenaar call assert_equal('marker', &foldmethod) 15542093c0eSBram Moolenaar call assert_equal(4, &foldcolumn) 15642093c0eSBram Moolenaar call assert_equal(0, &scrollbind) 15742093c0eSBram Moolenaar call assert_equal(0, &cursorbind) 15842093c0eSBram Moolenaar call assert_equal(1, &wrap) 15942093c0eSBram Moolenaar 16042093c0eSBram Moolenaar wincmd w 16142093c0eSBram Moolenaar call assert_equal(0, &diff) 16242093c0eSBram Moolenaar call assert_equal('marker', &foldmethod) 16342093c0eSBram Moolenaar call assert_equal(4, &foldcolumn) 16442093c0eSBram Moolenaar call assert_equal(0, &scrollbind) 16542093c0eSBram Moolenaar call assert_equal(0, &cursorbind) 16642093c0eSBram Moolenaar call assert_equal(1, &wrap) 16742093c0eSBram Moolenaar 168623cf88fSBram Moolenaar call delete('Xtest') 169623cf88fSBram Moolenaar call delete('Xtest2') 17042093c0eSBram Moolenaar windo bw! 17142093c0eSBram Moolenaarendfunc 17242093c0eSBram Moolenaar 17342093c0eSBram Moolenaarfunc Test_filler_lines() 17442093c0eSBram Moolenaar " Test that diffing shows correct filler lines 17542093c0eSBram Moolenaar enew! 17642093c0eSBram Moolenaar put =range(4,10) 17742093c0eSBram Moolenaar 1d _ 17842093c0eSBram Moolenaar vnew 17942093c0eSBram Moolenaar put =range(1,10) 18042093c0eSBram Moolenaar 1d _ 18142093c0eSBram Moolenaar windo diffthis 18242093c0eSBram Moolenaar wincmd h 18342093c0eSBram Moolenaar call assert_equal(1, line('w0')) 18442093c0eSBram Moolenaar unlet! diff_fdm diff_fdc 18590d121faSBram Moolenaar windo diffoff 18690d121faSBram Moolenaar bwipe! 18790d121faSBram Moolenaar enew! 18890d121faSBram Moolenaarendfunc 18942093c0eSBram Moolenaar 19090d121faSBram Moolenaarfunc Test_diffget_diffput() 19190d121faSBram Moolenaar enew! 19290d121faSBram Moolenaar let l = range(50) 19390d121faSBram Moolenaar call setline(1, l) 19490d121faSBram Moolenaar call assert_fails('diffget', 'E99:') 19590d121faSBram Moolenaar diffthis 19690d121faSBram Moolenaar call assert_fails('diffget', 'E100:') 19790d121faSBram Moolenaar new 19890d121faSBram Moolenaar let l[10] = 'one' 19990d121faSBram Moolenaar let l[20] = 'two' 20090d121faSBram Moolenaar let l[30] = 'three' 20190d121faSBram Moolenaar let l[40] = 'four' 20290d121faSBram Moolenaar call setline(1, l) 20390d121faSBram Moolenaar diffthis 20490d121faSBram Moolenaar call assert_equal('one', getline(11)) 20590d121faSBram Moolenaar 11diffget 20690d121faSBram Moolenaar call assert_equal('10', getline(11)) 20790d121faSBram Moolenaar 21diffput 20890d121faSBram Moolenaar wincmd w 20990d121faSBram Moolenaar call assert_equal('two', getline(21)) 21090d121faSBram Moolenaar normal 31Gdo 21190d121faSBram Moolenaar call assert_equal('three', getline(31)) 21290d121faSBram Moolenaar call assert_equal('40', getline(41)) 21390d121faSBram Moolenaar normal 41Gdp 21490d121faSBram Moolenaar wincmd w 21590d121faSBram Moolenaar call assert_equal('40', getline(41)) 21690d121faSBram Moolenaar new 21790d121faSBram Moolenaar diffthis 21890d121faSBram Moolenaar call assert_fails('diffget', 'E101:') 21990d121faSBram Moolenaar 22090d121faSBram Moolenaar windo diffoff 22179a213d6SBram Moolenaar %bwipe! 22279a213d6SBram Moolenaarendfunc 22379a213d6SBram Moolenaar 224*5f57bdcaSBram Moolenaar" Test putting two changes from one buffer to another 225*5f57bdcaSBram Moolenaarfunc Test_diffput_two() 226*5f57bdcaSBram Moolenaar new a 227*5f57bdcaSBram Moolenaar let win_a = win_getid() 228*5f57bdcaSBram Moolenaar call setline(1, range(1, 10)) 229*5f57bdcaSBram Moolenaar diffthis 230*5f57bdcaSBram Moolenaar new b 231*5f57bdcaSBram Moolenaar let win_b = win_getid() 232*5f57bdcaSBram Moolenaar call setline(1, range(1, 10)) 233*5f57bdcaSBram Moolenaar 8del 234*5f57bdcaSBram Moolenaar 5del 235*5f57bdcaSBram Moolenaar diffthis 236*5f57bdcaSBram Moolenaar call win_gotoid(win_a) 237*5f57bdcaSBram Moolenaar %diffput 238*5f57bdcaSBram Moolenaar call win_gotoid(win_b) 239*5f57bdcaSBram Moolenaar call assert_equal(map(range(1, 10), 'string(v:val)'), getline(1, '$')) 240*5f57bdcaSBram Moolenaar bwipe! a 241*5f57bdcaSBram Moolenaar bwipe! b 242*5f57bdcaSBram Moolenaarendfunc 243*5f57bdcaSBram Moolenaar 24479a213d6SBram Moolenaarfunc Test_dp_do_buffer() 24579a213d6SBram Moolenaar e! one 24679a213d6SBram Moolenaar let bn1=bufnr('%') 24779a213d6SBram Moolenaar let l = range(60) 24879a213d6SBram Moolenaar call setline(1, l) 24979a213d6SBram Moolenaar diffthis 25079a213d6SBram Moolenaar 25179a213d6SBram Moolenaar new two 25279a213d6SBram Moolenaar let l[10] = 'one' 25379a213d6SBram Moolenaar let l[20] = 'two' 25479a213d6SBram Moolenaar let l[30] = 'three' 25579a213d6SBram Moolenaar let l[40] = 'four' 25679a213d6SBram Moolenaar let l[50] = 'five' 25779a213d6SBram Moolenaar call setline(1, l) 25879a213d6SBram Moolenaar diffthis 25979a213d6SBram Moolenaar 26079a213d6SBram Moolenaar " dp and do with invalid buffer number. 26179a213d6SBram Moolenaar 11 26279a213d6SBram Moolenaar call assert_fails('norm 99999dp', 'E102:') 26379a213d6SBram Moolenaar call assert_fails('norm 99999do', 'E102:') 26479a213d6SBram Moolenaar call assert_fails('diffput non_existing_buffer', 'E94:') 26579a213d6SBram Moolenaar call assert_fails('diffget non_existing_buffer', 'E94:') 26679a213d6SBram Moolenaar 26779a213d6SBram Moolenaar " dp and do with valid buffer number. 26879a213d6SBram Moolenaar call assert_equal('one', getline('.')) 26979a213d6SBram Moolenaar exe 'norm ' . bn1 . 'do' 27079a213d6SBram Moolenaar call assert_equal('10', getline('.')) 27179a213d6SBram Moolenaar 21 27279a213d6SBram Moolenaar call assert_equal('two', getline('.')) 27379a213d6SBram Moolenaar diffget one 27479a213d6SBram Moolenaar call assert_equal('20', getline('.')) 27579a213d6SBram Moolenaar 27679a213d6SBram Moolenaar 31 27779a213d6SBram Moolenaar exe 'norm ' . bn1 . 'dp' 27879a213d6SBram Moolenaar 41 27979a213d6SBram Moolenaar diffput one 28079a213d6SBram Moolenaar wincmd w 28179a213d6SBram Moolenaar 31 28279a213d6SBram Moolenaar call assert_equal('three', getline('.')) 28379a213d6SBram Moolenaar 41 28479a213d6SBram Moolenaar call assert_equal('four', getline('.')) 28579a213d6SBram Moolenaar 28679a213d6SBram Moolenaar " dp and do with buffer number which is not in diff mode. 28779a213d6SBram Moolenaar new not_in_diff_mode 28879a213d6SBram Moolenaar let bn3=bufnr('%') 28979a213d6SBram Moolenaar wincmd w 29079a213d6SBram Moolenaar 51 29179a213d6SBram Moolenaar call assert_fails('exe "norm" . bn3 . "dp"', 'E103:') 29279a213d6SBram Moolenaar call assert_fails('exe "norm" . bn3 . "do"', 'E103:') 29379a213d6SBram Moolenaar call assert_fails('diffput not_in_diff_mode', 'E94:') 29479a213d6SBram Moolenaar call assert_fails('diffget not_in_diff_mode', 'E94:') 29579a213d6SBram Moolenaar 29679a213d6SBram Moolenaar windo diffoff 29779a213d6SBram Moolenaar %bwipe! 29842093c0eSBram Moolenaarendfunc 299e67d546fSBram Moolenaar 300df77cef9SBram Moolenaarfunc Test_do_lastline() 301df77cef9SBram Moolenaar e! one 302df77cef9SBram Moolenaar call setline(1, ['1','2','3','4','5','6']) 303df77cef9SBram Moolenaar diffthis 304df77cef9SBram Moolenaar 305df77cef9SBram Moolenaar new two 306df77cef9SBram Moolenaar call setline(1, ['2','4','5']) 307df77cef9SBram Moolenaar diffthis 308df77cef9SBram Moolenaar 309df77cef9SBram Moolenaar 1 310df77cef9SBram Moolenaar norm dp]c 311df77cef9SBram Moolenaar norm dp]c 312df77cef9SBram Moolenaar wincmd w 313df77cef9SBram Moolenaar call assert_equal(4, line('$')) 314df77cef9SBram Moolenaar norm G 315df77cef9SBram Moolenaar norm do 316df77cef9SBram Moolenaar call assert_equal(3, line('$')) 317df77cef9SBram Moolenaar 318df77cef9SBram Moolenaar windo diffoff 319df77cef9SBram Moolenaar %bwipe! 320df77cef9SBram Moolenaarendfunc 321df77cef9SBram Moolenaar 322e67d546fSBram Moolenaarfunc Test_diffoff() 323e67d546fSBram Moolenaar enew! 324e67d546fSBram Moolenaar call setline(1, ['Two', 'Three']) 32579a213d6SBram Moolenaar redraw 326e67d546fSBram Moolenaar let normattr = screenattr(1, 1) 327e67d546fSBram Moolenaar diffthis 328e67d546fSBram Moolenaar botright vert new 329e67d546fSBram Moolenaar call setline(1, ['One', '', 'Two', 'Three']) 330e67d546fSBram Moolenaar diffthis 331e67d546fSBram Moolenaar redraw 33225ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 333e67d546fSBram Moolenaar diffoff! 334e67d546fSBram Moolenaar redraw 335e67d546fSBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 336e67d546fSBram Moolenaar bwipe! 337e67d546fSBram Moolenaar bwipe! 338e67d546fSBram Moolenaarendfunc 339025e3e0bSBram Moolenaar 340e828b762SBram Moolenaarfunc Common_icase_test() 341e828b762SBram Moolenaar edit one 342da22b8ccSBram Moolenaar call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve']) 34379a213d6SBram Moolenaar redraw 34479a213d6SBram Moolenaar let normattr = screenattr(1, 1) 34579a213d6SBram Moolenaar diffthis 34679a213d6SBram Moolenaar 34779a213d6SBram Moolenaar botright vert new two 348da22b8ccSBram Moolenaar call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE']) 34979a213d6SBram Moolenaar diffthis 35079a213d6SBram Moolenaar 35179a213d6SBram Moolenaar redraw 35279a213d6SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 35379a213d6SBram Moolenaar call assert_equal(normattr, screenattr(2, 1)) 35479a213d6SBram Moolenaar call assert_notequal(normattr, screenattr(3, 1)) 35579a213d6SBram Moolenaar call assert_equal(normattr, screenattr(4, 1)) 35679a213d6SBram Moolenaar 357da22b8ccSBram Moolenaar let dtextattr = screenattr(5, 3) 358da22b8ccSBram Moolenaar call assert_notequal(dtextattr, screenattr(5, 1)) 359da22b8ccSBram Moolenaar call assert_notequal(dtextattr, screenattr(5, 5)) 360da22b8ccSBram Moolenaar 36179a213d6SBram Moolenaar diffoff! 36279a213d6SBram Moolenaar %bwipe! 363e828b762SBram Moolenaarendfunc 364e828b762SBram Moolenaar 365e828b762SBram Moolenaarfunc Test_diffopt_icase() 366e828b762SBram Moolenaar set diffopt=icase,foldcolumn:0 367e828b762SBram Moolenaar call Common_icase_test() 36879a213d6SBram Moolenaar set diffopt& 36979a213d6SBram Moolenaarendfunc 37079a213d6SBram Moolenaar 371e828b762SBram Moolenaarfunc Test_diffopt_icase_internal() 372e828b762SBram Moolenaar set diffopt=icase,foldcolumn:0,internal 373e828b762SBram Moolenaar call Common_icase_test() 374e828b762SBram Moolenaar set diffopt& 375e828b762SBram Moolenaarendfunc 37679a213d6SBram Moolenaar 377e828b762SBram Moolenaarfunc Common_iwhite_test() 378e828b762SBram Moolenaar edit one 379e828b762SBram Moolenaar " Difference in trailing spaces and amount of spaces should be ignored, 38079a213d6SBram Moolenaar " but not other space differences. 381e828b762SBram Moolenaar call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four']) 38279a213d6SBram Moolenaar redraw 38379a213d6SBram Moolenaar let normattr = screenattr(1, 1) 38479a213d6SBram Moolenaar diffthis 38579a213d6SBram Moolenaar 38679a213d6SBram Moolenaar botright vert new two 387e828b762SBram Moolenaar call setline(1, ["One\t ", "Two\t ", 'Three', 'one two', 'onetwo', ' Four']) 38879a213d6SBram Moolenaar diffthis 38979a213d6SBram Moolenaar 39079a213d6SBram Moolenaar redraw 39179a213d6SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 39279a213d6SBram Moolenaar call assert_equal(normattr, screenattr(2, 1)) 39379a213d6SBram Moolenaar call assert_equal(normattr, screenattr(3, 1)) 394e828b762SBram Moolenaar call assert_equal(normattr, screenattr(4, 1)) 395e828b762SBram Moolenaar call assert_notequal(normattr, screenattr(5, 1)) 396e828b762SBram Moolenaar call assert_notequal(normattr, screenattr(6, 1)) 39779a213d6SBram Moolenaar 39879a213d6SBram Moolenaar diffoff! 39979a213d6SBram Moolenaar %bwipe! 400e828b762SBram Moolenaarendfunc 401e828b762SBram Moolenaar 402e828b762SBram Moolenaarfunc Test_diffopt_iwhite() 403e828b762SBram Moolenaar set diffopt=iwhite,foldcolumn:0 404e828b762SBram Moolenaar call Common_iwhite_test() 405e828b762SBram Moolenaar set diffopt& 406e828b762SBram Moolenaarendfunc 407e828b762SBram Moolenaar 408e828b762SBram Moolenaarfunc Test_diffopt_iwhite_internal() 409e828b762SBram Moolenaar set diffopt=internal,iwhite,foldcolumn:0 410e828b762SBram Moolenaar call Common_iwhite_test() 41179a213d6SBram Moolenaar set diffopt& 41279a213d6SBram Moolenaarendfunc 41379a213d6SBram Moolenaar 41479a213d6SBram Moolenaarfunc Test_diffopt_context() 41579a213d6SBram Moolenaar enew! 41679a213d6SBram Moolenaar call setline(1, ['1', '2', '3', '4', '5', '6', '7']) 41779a213d6SBram Moolenaar diffthis 41879a213d6SBram Moolenaar new 41979a213d6SBram Moolenaar call setline(1, ['1', '2', '3', '4', '5x', '6', '7']) 42079a213d6SBram Moolenaar diffthis 42179a213d6SBram Moolenaar 42279a213d6SBram Moolenaar set diffopt=context:2 42379a213d6SBram Moolenaar call assert_equal('+-- 2 lines: 1', foldtextresult(1)) 424e828b762SBram Moolenaar set diffopt=internal,context:2 425e828b762SBram Moolenaar call assert_equal('+-- 2 lines: 1', foldtextresult(1)) 426e828b762SBram Moolenaar 42779a213d6SBram Moolenaar set diffopt=context:1 42879a213d6SBram Moolenaar call assert_equal('+-- 3 lines: 1', foldtextresult(1)) 429e828b762SBram Moolenaar set diffopt=internal,context:1 430e828b762SBram Moolenaar call assert_equal('+-- 3 lines: 1', foldtextresult(1)) 43179a213d6SBram Moolenaar 43279a213d6SBram Moolenaar diffoff! 43379a213d6SBram Moolenaar %bwipe! 43479a213d6SBram Moolenaar set diffopt& 43579a213d6SBram Moolenaarendfunc 43679a213d6SBram Moolenaar 43779a213d6SBram Moolenaarfunc Test_diffopt_horizontal() 438e828b762SBram Moolenaar set diffopt=internal,horizontal 43979a213d6SBram Moolenaar diffsplit 44079a213d6SBram Moolenaar 44179a213d6SBram Moolenaar call assert_equal(&columns, winwidth(1)) 44279a213d6SBram Moolenaar call assert_equal(&columns, winwidth(2)) 44379a213d6SBram Moolenaar call assert_equal(&lines, winheight(1) + winheight(2) + 3) 44479a213d6SBram Moolenaar call assert_inrange(0, 1, winheight(1) - winheight(2)) 44579a213d6SBram Moolenaar 44679a213d6SBram Moolenaar set diffopt& 44779a213d6SBram Moolenaar diffoff! 44879a213d6SBram Moolenaar %bwipe 44979a213d6SBram Moolenaarendfunc 45079a213d6SBram Moolenaar 45179a213d6SBram Moolenaarfunc Test_diffopt_vertical() 452e828b762SBram Moolenaar set diffopt=internal,vertical 45379a213d6SBram Moolenaar diffsplit 45479a213d6SBram Moolenaar 45579a213d6SBram Moolenaar call assert_equal(&lines - 2, winheight(1)) 45679a213d6SBram Moolenaar call assert_equal(&lines - 2, winheight(2)) 45779a213d6SBram Moolenaar call assert_equal(&columns, winwidth(1) + winwidth(2) + 1) 45879a213d6SBram Moolenaar call assert_inrange(0, 1, winwidth(1) - winwidth(2)) 45979a213d6SBram Moolenaar 46079a213d6SBram Moolenaar set diffopt& 46179a213d6SBram Moolenaar diffoff! 46279a213d6SBram Moolenaar %bwipe 46379a213d6SBram Moolenaarendfunc 46479a213d6SBram Moolenaar 46597ce4192SBram Moolenaarfunc Test_diffopt_hiddenoff() 466e828b762SBram Moolenaar set diffopt=internal,filler,foldcolumn:0,hiddenoff 46797ce4192SBram Moolenaar e! one 46897ce4192SBram Moolenaar call setline(1, ['Two', 'Three']) 46997ce4192SBram Moolenaar redraw 47097ce4192SBram Moolenaar let normattr = screenattr(1, 1) 47197ce4192SBram Moolenaar diffthis 47297ce4192SBram Moolenaar botright vert new two 47397ce4192SBram Moolenaar call setline(1, ['One', 'Four']) 47497ce4192SBram Moolenaar diffthis 47597ce4192SBram Moolenaar redraw 47697ce4192SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 47797ce4192SBram Moolenaar set hidden 47897ce4192SBram Moolenaar close 47997ce4192SBram Moolenaar redraw 48097ce4192SBram Moolenaar " should not diffing with hidden buffer two while 'hiddenoff' is enabled 48197ce4192SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 48297ce4192SBram Moolenaar 48397ce4192SBram Moolenaar bwipe! 48497ce4192SBram Moolenaar bwipe! 48597ce4192SBram Moolenaar set hidden& diffopt& 48697ce4192SBram Moolenaarendfunc 48797ce4192SBram Moolenaar 48825ea0544SBram Moolenaarfunc Test_diffoff_hidden() 489e828b762SBram Moolenaar set diffopt=internal,filler,foldcolumn:0 49025ea0544SBram Moolenaar e! one 49125ea0544SBram Moolenaar call setline(1, ['Two', 'Three']) 49279a213d6SBram Moolenaar redraw 49325ea0544SBram Moolenaar let normattr = screenattr(1, 1) 49425ea0544SBram Moolenaar diffthis 49525ea0544SBram Moolenaar botright vert new two 49625ea0544SBram Moolenaar call setline(1, ['One', 'Four']) 49725ea0544SBram Moolenaar diffthis 49825ea0544SBram Moolenaar redraw 49925ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 50025ea0544SBram Moolenaar set hidden 50125ea0544SBram Moolenaar close 50225ea0544SBram Moolenaar redraw 50325ea0544SBram Moolenaar " diffing with hidden buffer two 50425ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 50525ea0544SBram Moolenaar diffoff 50625ea0544SBram Moolenaar redraw 50725ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 50825ea0544SBram Moolenaar diffthis 50925ea0544SBram Moolenaar redraw 51025ea0544SBram Moolenaar " still diffing with hidden buffer two 51125ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 51225ea0544SBram Moolenaar diffoff! 51325ea0544SBram Moolenaar redraw 51425ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 51525ea0544SBram Moolenaar diffthis 51625ea0544SBram Moolenaar redraw 51725ea0544SBram Moolenaar " no longer diffing with hidden buffer two 51825ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 51925ea0544SBram Moolenaar 52025ea0544SBram Moolenaar bwipe! 52125ea0544SBram Moolenaar bwipe! 52225ea0544SBram Moolenaar set hidden& diffopt& 52325ea0544SBram Moolenaarendfunc 52425ea0544SBram Moolenaar 525025e3e0bSBram Moolenaarfunc Test_setting_cursor() 526025e3e0bSBram Moolenaar new Xtest1 527025e3e0bSBram Moolenaar put =range(1,90) 528025e3e0bSBram Moolenaar wq 529025e3e0bSBram Moolenaar new Xtest2 530025e3e0bSBram Moolenaar put =range(1,100) 531025e3e0bSBram Moolenaar wq 532025e3e0bSBram Moolenaar 533025e3e0bSBram Moolenaar tabe Xtest2 534025e3e0bSBram Moolenaar $ 535025e3e0bSBram Moolenaar diffsp Xtest1 536025e3e0bSBram Moolenaar tabclose 537025e3e0bSBram Moolenaar 538025e3e0bSBram Moolenaar call delete('Xtest1') 539025e3e0bSBram Moolenaar call delete('Xtest2') 540025e3e0bSBram Moolenaarendfunc 541aeb661e1SBram Moolenaar 542aeb661e1SBram Moolenaarfunc Test_diff_move_to() 543aeb661e1SBram Moolenaar new 544aeb661e1SBram Moolenaar call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 545aeb661e1SBram Moolenaar diffthis 546aeb661e1SBram Moolenaar vnew 547aeb661e1SBram Moolenaar call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x']) 548aeb661e1SBram Moolenaar diffthis 549aeb661e1SBram Moolenaar norm ]c 550aeb661e1SBram Moolenaar call assert_equal(2, line('.')) 551aeb661e1SBram Moolenaar norm 3]c 552aeb661e1SBram Moolenaar call assert_equal(9, line('.')) 553aeb661e1SBram Moolenaar norm 10]c 554aeb661e1SBram Moolenaar call assert_equal(11, line('.')) 555aeb661e1SBram Moolenaar norm [c 556aeb661e1SBram Moolenaar call assert_equal(9, line('.')) 557aeb661e1SBram Moolenaar norm 2[c 558aeb661e1SBram Moolenaar call assert_equal(5, line('.')) 559aeb661e1SBram Moolenaar norm 10[c 560aeb661e1SBram Moolenaar call assert_equal(2, line('.')) 561aeb661e1SBram Moolenaar %bwipe! 562aeb661e1SBram Moolenaarendfunc 563aeb661e1SBram Moolenaar 56479a213d6SBram Moolenaarfunc Test_diffexpr() 56579a213d6SBram Moolenaar if !executable('diff') 56679a213d6SBram Moolenaar return 56779a213d6SBram Moolenaar endif 56879a213d6SBram Moolenaar 56979a213d6SBram Moolenaar func DiffExpr() 5703b8defd0SBram Moolenaar " Prepent some text to check diff type detection 5713b8defd0SBram Moolenaar call writefile(['warning', ' message'], v:fname_out) 5723b8defd0SBram Moolenaar silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>>' . v:fname_out 57379a213d6SBram Moolenaar endfunc 57479a213d6SBram Moolenaar set diffexpr=DiffExpr() 57579a213d6SBram Moolenaar set diffopt=foldcolumn:0 57679a213d6SBram Moolenaar 57779a213d6SBram Moolenaar enew! 57879a213d6SBram Moolenaar call setline(1, ['one', 'two', 'three']) 57979a213d6SBram Moolenaar redraw 58079a213d6SBram Moolenaar let normattr = screenattr(1, 1) 58179a213d6SBram Moolenaar diffthis 58279a213d6SBram Moolenaar 58379a213d6SBram Moolenaar botright vert new 58479a213d6SBram Moolenaar call setline(1, ['one', 'two', 'three.']) 58579a213d6SBram Moolenaar diffthis 58679a213d6SBram Moolenaar 58779a213d6SBram Moolenaar redraw 58879a213d6SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 58979a213d6SBram Moolenaar call assert_equal(normattr, screenattr(2, 1)) 59079a213d6SBram Moolenaar call assert_notequal(normattr, screenattr(3, 1)) 59179a213d6SBram Moolenaar 59279a213d6SBram Moolenaar diffoff! 59379a213d6SBram Moolenaar %bwipe! 59479a213d6SBram Moolenaar set diffexpr& diffopt& 59579a213d6SBram Moolenaarendfunc 59679a213d6SBram Moolenaar 597aeb661e1SBram Moolenaarfunc Test_diffpatch() 598aeb661e1SBram Moolenaar " The patch program on MS-Windows may fail or hang. 599aeb661e1SBram Moolenaar if !executable('patch') || !has('unix') 600aeb661e1SBram Moolenaar return 601aeb661e1SBram Moolenaar endif 602aeb661e1SBram Moolenaar new 603aeb661e1SBram Moolenaar insert 604aeb661e1SBram Moolenaar*************** 605aeb661e1SBram Moolenaar*** 1,3 **** 606aeb661e1SBram Moolenaar 1 607aeb661e1SBram Moolenaar! 2 608aeb661e1SBram Moolenaar 3 609aeb661e1SBram Moolenaar--- 1,4 ---- 610aeb661e1SBram Moolenaar 1 611aeb661e1SBram Moolenaar! 2x 612aeb661e1SBram Moolenaar 3 613aeb661e1SBram Moolenaar+ 4 614aeb661e1SBram Moolenaar. 61597fbc404SBram Moolenaar saveas! Xpatch 616aeb661e1SBram Moolenaar bwipe! 617aeb661e1SBram Moolenaar new 618aeb661e1SBram Moolenaar call assert_fails('diffpatch Xpatch', 'E816:') 6191ef73e33SBram Moolenaar 620a95ab321SBram Moolenaar for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch'] 621aeb661e1SBram Moolenaar call setline(1, ['1', '2', '3']) 6221ef73e33SBram Moolenaar if name != 'Xpatch' 6231ef73e33SBram Moolenaar call rename('Xpatch', name) 6241ef73e33SBram Moolenaar endif 6251ef73e33SBram Moolenaar exe 'diffpatch ' . escape(name, '$') 626aeb661e1SBram Moolenaar call assert_equal(['1', '2x', '3', '4'], getline(1, '$')) 6271ef73e33SBram Moolenaar if name != 'Xpatch' 6281ef73e33SBram Moolenaar call rename(name, 'Xpatch') 6291ef73e33SBram Moolenaar endif 6301ef73e33SBram Moolenaar bwipe! 6311ef73e33SBram Moolenaar endfor 6321ef73e33SBram Moolenaar 633aeb661e1SBram Moolenaar call delete('Xpatch') 634aeb661e1SBram Moolenaar bwipe! 635aeb661e1SBram Moolenaarendfunc 636aeb661e1SBram Moolenaar 637aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers() 638aeb661e1SBram Moolenaar for i in range(1, 8) 639aeb661e1SBram Moolenaar exe "new Xtest" . i 640aeb661e1SBram Moolenaar diffthis 641aeb661e1SBram Moolenaar endfor 642aeb661e1SBram Moolenaar new Xtest9 643aeb661e1SBram Moolenaar call assert_fails('diffthis', 'E96:') 644aeb661e1SBram Moolenaar %bwipe! 645aeb661e1SBram Moolenaarendfunc 646aeb661e1SBram Moolenaar 647aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable() 648aeb661e1SBram Moolenaar new 649aeb661e1SBram Moolenaar call setline(1, [1, 2, 3, 4]) 650aeb661e1SBram Moolenaar setl nomodifiable 651aeb661e1SBram Moolenaar diffthis 652aeb661e1SBram Moolenaar vnew 653aeb661e1SBram Moolenaar call setline(1, ['1x', 2, 3, 3, 4]) 654aeb661e1SBram Moolenaar diffthis 655aeb661e1SBram Moolenaar call assert_fails('norm dp', 'E793:') 656aeb661e1SBram Moolenaar setl nomodifiable 657aeb661e1SBram Moolenaar call assert_fails('norm do', 'E21:') 658aeb661e1SBram Moolenaar %bwipe! 659aeb661e1SBram Moolenaarendfunc 660f58a8475SBram Moolenaar 66197fbc404SBram Moolenaarfunc Test_diff_hlID() 66297fbc404SBram Moolenaar new 66397fbc404SBram Moolenaar call setline(1, [1, 2, 3]) 66497fbc404SBram Moolenaar diffthis 66597fbc404SBram Moolenaar vnew 66697fbc404SBram Moolenaar call setline(1, ['1x', 2, 'x', 3]) 66797fbc404SBram Moolenaar diffthis 66897fbc404SBram Moolenaar redraw 66997fbc404SBram Moolenaar 67097fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(-1, 1), "name"), "") 67197fbc404SBram Moolenaar 67297fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange") 67397fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(1, 2), "name"), "DiffText") 67497fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "") 67597fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "DiffAdd") 67697fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(4, 1), "name"), "") 67797fbc404SBram Moolenaar 67897fbc404SBram Moolenaar wincmd w 67997fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange") 68097fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "") 68197fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "") 68297fbc404SBram Moolenaar 68397fbc404SBram Moolenaar %bwipe! 68497fbc404SBram Moolenaarendfunc 68597fbc404SBram Moolenaar 68697fbc404SBram Moolenaarfunc Test_diff_filler() 68797fbc404SBram Moolenaar new 68897fbc404SBram Moolenaar call setline(1, [1, 2, 3, 'x', 4]) 68997fbc404SBram Moolenaar diffthis 69097fbc404SBram Moolenaar vnew 69197fbc404SBram Moolenaar call setline(1, [1, 2, 'y', 'y', 3, 4]) 69297fbc404SBram Moolenaar diffthis 69397fbc404SBram Moolenaar redraw 69497fbc404SBram Moolenaar 69597fbc404SBram Moolenaar call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'diff_filler(v:val)')) 69697fbc404SBram Moolenaar wincmd w 69797fbc404SBram Moolenaar call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)')) 69897fbc404SBram Moolenaar 69997fbc404SBram Moolenaar %bwipe! 70097fbc404SBram Moolenaarendfunc 70197fbc404SBram Moolenaar 702f58a8475SBram Moolenaarfunc Test_diff_lastline() 703f58a8475SBram Moolenaar enew! 704f58a8475SBram Moolenaar only! 705f58a8475SBram Moolenaar call setline(1, ['This is a ', 'line with five ', 'rows']) 706f58a8475SBram Moolenaar diffthis 707f58a8475SBram Moolenaar botright vert new 708f58a8475SBram Moolenaar call setline(1, ['This is', 'a line with ', 'four rows']) 709f58a8475SBram Moolenaar diffthis 710f58a8475SBram Moolenaar 1 711f58a8475SBram Moolenaar call feedkeys("Je a\<CR>", 'tx') 712f58a8475SBram Moolenaar call feedkeys("Je a\<CR>", 'tx') 713f58a8475SBram Moolenaar let w1lines = winline() 714f58a8475SBram Moolenaar wincmd w 715f58a8475SBram Moolenaar $ 716f58a8475SBram Moolenaar let w2lines = winline() 717f58a8475SBram Moolenaar call assert_equal(w2lines, w1lines) 718f58a8475SBram Moolenaar bwipe! 719f58a8475SBram Moolenaar bwipe! 720f58a8475SBram Moolenaarendfunc 721e828b762SBram Moolenaar 722785fc656SBram Moolenaarfunc WriteDiffFiles(buf, list1, list2) 723e828b762SBram Moolenaar call writefile(a:list1, 'Xfile1') 724e828b762SBram Moolenaar call writefile(a:list2, 'Xfile2') 725785fc656SBram Moolenaar if a:buf 726785fc656SBram Moolenaar call term_sendkeys(a:buf, ":checktime\<CR>") 727785fc656SBram Moolenaar endif 728e828b762SBram Moolenaarendfunc 729e828b762SBram Moolenaar 730785fc656SBram Moolenaar" Verify a screendump with both the internal and external diff. 731e828b762SBram Moolenaarfunc VerifyBoth(buf, dumpfile, extra) 732e828b762SBram Moolenaar " trailing : for leaving the cursor on the command line 733785fc656SBram Moolenaar for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"] 734e828b762SBram Moolenaar call term_sendkeys(a:buf, cmd) 735e828b762SBram Moolenaar if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external') 736e828b762SBram Moolenaar break " don't let the next iteration overwrite the "failed" file. 737e828b762SBram Moolenaar endif 738e828b762SBram Moolenaar endfor 739e828b762SBram Moolenaarendfunc 740e828b762SBram Moolenaar 741785fc656SBram Moolenaar" Verify a screendump with the internal diff only. 742785fc656SBram Moolenaarfunc VerifyInternal(buf, dumpfile, extra) 743785fc656SBram Moolenaar call term_sendkeys(a:buf, ":diffupdate!\<CR>") 744785fc656SBram Moolenaar " trailing : for leaving the cursor on the command line 745785fc656SBram Moolenaar call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:") 746785fc656SBram Moolenaar call VerifyScreenDump(a:buf, a:dumpfile, {}) 747785fc656SBram Moolenaarendfunc 748785fc656SBram Moolenaar 749e828b762SBram Moolenaarfunc Test_diff_screen() 750e828b762SBram Moolenaar if !CanRunVimInTerminal() || !has('menu') 751e828b762SBram Moolenaar return 752e828b762SBram Moolenaar endif 753e828b762SBram Moolenaar " clean up already existing swap files, just in case 754e828b762SBram Moolenaar call delete('.Xfile1.swp') 755e828b762SBram Moolenaar call delete('.Xfile2.swp') 756e828b762SBram Moolenaar 757e828b762SBram Moolenaar " Test 1: Add a line in beginning of file 2 758785fc656SBram 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]) 759e828b762SBram Moolenaar let buf = RunVimInTerminal('-d Xfile1 Xfile2', {}) 760e828b762SBram Moolenaar " Set autoread mode, ,so that Vim won't complain once we re-write the test 761e828b762SBram Moolenaar " files 762785fc656SBram Moolenaar call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w") 763e828b762SBram Moolenaar 764e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_01', '') 765e828b762SBram Moolenaar 766e828b762SBram Moolenaar " Test 2: Add a line in beginning of file 1 767785fc656SBram 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]) 768e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_02', '') 769e828b762SBram Moolenaar 770e828b762SBram Moolenaar " Test 3: Add a line at the end of file 2 771785fc656SBram 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]) 772e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_03', '') 773e828b762SBram Moolenaar 774e828b762SBram Moolenaar " Test 4: Add a line at the end of file 1 775785fc656SBram 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]) 776e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_04', '') 777e828b762SBram Moolenaar 778e828b762SBram Moolenaar " Test 5: Add a line in the middle of file 2, remove on at the end of file 1 779785fc656SBram 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]) 780e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_05', '') 781e828b762SBram Moolenaar 782e828b762SBram Moolenaar " Test 6: Add a line in the middle of file 1, remove on at the end of file 2 783785fc656SBram 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]) 784e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_06', '') 785e828b762SBram Moolenaar 786e828b762SBram Moolenaar " Test 7 - 9: Test normal/patience/histogram diff algorithm 787785fc656SBram Moolenaar call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{', 788e828b762SBram Moolenaar \ ' int i;', ' for(i = 0; i < 10; i++)', ' {', ' printf("Your answer is: ");', 789e828b762SBram Moolenaar \ ' printf("%d\n", foo);', ' }', '}', '', 'int fact(int n)', '{', ' if(n > 1)', ' {', 790e828b762SBram Moolenaar \ ' return fact(n-1) * n;', ' }', ' return 1;', '}', '', 'int main(int argc, char **argv)', 791e828b762SBram Moolenaar \ '{', ' frobnitz(fact(10));', '}'], 792e828b762SBram Moolenaar \ ['#include <stdio.h>', '', 'int fib(int n)', '{', ' if(n > 2)', ' {', 793e828b762SBram Moolenaar \ ' return fib(n-1) + fib(n-2);', ' }', ' return 1;', '}', '', '// Frobs foo heartily', 794e828b762SBram Moolenaar \ 'int frobnitz(int foo)', '{', ' int i;', ' for(i = 0; i < 10; i++)', ' {', 795e828b762SBram Moolenaar \ ' printf("%d\n", foo);', ' }', '}', '', 796e828b762SBram Moolenaar \ 'int main(int argc, char **argv)', '{', ' frobnitz(fib(10));', '}']) 797e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 798e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 799e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_07', {}) 800e828b762SBram Moolenaar 801e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>") 802e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_08', {}) 803e828b762SBram Moolenaar 804e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>") 805e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_09', {}) 806e828b762SBram Moolenaar 807e828b762SBram Moolenaar " Test 10-11: normal/indent-heuristic 808e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt&vim\<cr>") 809785fc656SBram Moolenaar call WriteDiffFiles(buf, ['', ' def finalize(values)', '', ' values.each do |v|', ' v.finalize', ' end'], 810e828b762SBram Moolenaar \ ['', ' def finalize(values)', '', ' values.each do |v|', ' v.prepare', ' end', '', 811e828b762SBram Moolenaar \ ' values.each do |v|', ' v.finalize', ' end']) 812e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 813e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 814e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_10', {}) 815e828b762SBram Moolenaar 816e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>") 817e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_11', {}) 818e828b762SBram Moolenaar 819e828b762SBram Moolenaar " Test 12: diff the same file 820785fc656SBram Moolenaar call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 821e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_12', '') 822e828b762SBram Moolenaar 823e828b762SBram Moolenaar " Test 13: diff an empty file 824785fc656SBram Moolenaar call WriteDiffFiles(buf, [], []) 825e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_13', '') 826e828b762SBram Moolenaar 827e828b762SBram Moolenaar " Test 14: test diffopt+=icase 828785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe']) 829e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase") 830e828b762SBram Moolenaar 831e828b762SBram Moolenaar " Test 15-16: test diffopt+=iwhite 832785fc656SBram Moolenaar call WriteDiffFiles(buf, ['int main()', '{', ' printf("Hello, World!");', ' return 0;', '}'], 833e828b762SBram Moolenaar \ ['int main()', '{', ' if (0)', ' {', ' printf("Hello, World!");', ' return 0;', ' }', '}']) 834e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 835e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>") 836e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_15', {}) 837e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 838e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_16', {}) 839e828b762SBram Moolenaar 840785fc656SBram Moolenaar " Test 17: test diffopt+=iblank 841785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy']) 842785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank") 843785fc656SBram Moolenaar 844785fc656SBram Moolenaar " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol 845785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite") 846785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall") 847785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol") 848785fc656SBram Moolenaar 849785fc656SBram Moolenaar " Test 19: test diffopt+=iwhiteeol 850785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar']) 851785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol") 852785fc656SBram Moolenaar 853785fc656SBram Moolenaar " Test 19: test diffopt+=iwhiteall 854785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall") 855785fc656SBram Moolenaar 856e828b762SBram Moolenaar " clean up 857e828b762SBram Moolenaar call StopVimInTerminal(buf) 858e828b762SBram Moolenaar call delete('Xfile1') 859e828b762SBram Moolenaar call delete('Xfile2') 860e828b762SBram Moolenaarendfunc 861e828b762SBram Moolenaar 8624a5abbd6SBram Moolenaarfunc Test_diff_with_cursorline() 8634a5abbd6SBram Moolenaar if !CanRunVimInTerminal() 8644a5abbd6SBram Moolenaar return 8654a5abbd6SBram Moolenaar endif 8664a5abbd6SBram Moolenaar 8674a5abbd6SBram Moolenaar call writefile([ 8684a5abbd6SBram Moolenaar \ 'hi CursorLine ctermbg=red ctermfg=white', 8694a5abbd6SBram Moolenaar \ 'set cursorline', 8704a5abbd6SBram Moolenaar \ 'call setline(1, ["foo","foo","foo","bar"])', 8714a5abbd6SBram Moolenaar \ 'vnew', 8724a5abbd6SBram Moolenaar \ 'call setline(1, ["bee","foo","foo","baz"])', 8734a5abbd6SBram Moolenaar \ 'windo diffthis', 8744a5abbd6SBram Moolenaar \ '2wincmd w', 8754a5abbd6SBram Moolenaar \ ], 'Xtest_diff_cursorline') 8764a5abbd6SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {}) 8774a5abbd6SBram Moolenaar 8784a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {}) 8794a5abbd6SBram Moolenaar call term_sendkeys(buf, "j") 8804a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {}) 8814a5abbd6SBram Moolenaar call term_sendkeys(buf, "j") 8824a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {}) 8834a5abbd6SBram Moolenaar 8844a5abbd6SBram Moolenaar " clean up 8854a5abbd6SBram Moolenaar call StopVimInTerminal(buf) 8864a5abbd6SBram Moolenaar call delete('Xtest_diff_cursorline') 8874a5abbd6SBram Moolenaarendfunc 888