142093c0eSBram Moolenaar" Tests for diff mode 242093c0eSBram Moolenaar 342093c0eSBram Moolenaarfunc Test_diff_fold_sync() 442093c0eSBram Moolenaar enew! 542093c0eSBram Moolenaar let l = range(50) 642093c0eSBram Moolenaar call setline(1, l) 742093c0eSBram Moolenaar diffthis 842093c0eSBram Moolenaar let winone = win_getid() 942093c0eSBram Moolenaar new 1042093c0eSBram Moolenaar let l[25] = 'diff' 1142093c0eSBram Moolenaar call setline(1, l) 1242093c0eSBram Moolenaar diffthis 1342093c0eSBram Moolenaar let wintwo = win_getid() 1442093c0eSBram Moolenaar " line 15 is inside the closed fold 1542093c0eSBram Moolenaar call assert_equal(19, foldclosedend(10)) 1642093c0eSBram Moolenaar call win_gotoid(winone) 1742093c0eSBram Moolenaar call assert_equal(19, foldclosedend(10)) 1842093c0eSBram Moolenaar " open the fold 1942093c0eSBram Moolenaar normal zv 2042093c0eSBram Moolenaar call assert_equal(-1, foldclosedend(10)) 2142093c0eSBram Moolenaar " fold in other window must have opened too 2242093c0eSBram Moolenaar call win_gotoid(wintwo) 2342093c0eSBram Moolenaar call assert_equal(-1, foldclosedend(10)) 2442093c0eSBram Moolenaar 2542093c0eSBram Moolenaar " cursor position is in sync 2642093c0eSBram Moolenaar normal 23G 2742093c0eSBram Moolenaar call win_gotoid(winone) 2842093c0eSBram Moolenaar call assert_equal(23, getcurpos()[1]) 2942093c0eSBram Moolenaar 3042093c0eSBram Moolenaar windo diffoff 3142093c0eSBram Moolenaar close! 3242093c0eSBram Moolenaar set nomodified 3342093c0eSBram Moolenaarendfunc 3442093c0eSBram Moolenaar 3542093c0eSBram Moolenaarfunc Test_vert_split() 3642093c0eSBram Moolenaar " Disable the title to avoid xterm keeping the wrong one. 3742093c0eSBram Moolenaar set notitle noicon 3842093c0eSBram Moolenaar new 3942093c0eSBram Moolenaar let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee'] 4042093c0eSBram Moolenaar call setline(1, l) 4142093c0eSBram Moolenaar w! Xtest 4242093c0eSBram Moolenaar normal dd 4342093c0eSBram Moolenaar $ 4442093c0eSBram Moolenaar put 4542093c0eSBram Moolenaar normal kkrXoxxx 4642093c0eSBram Moolenaar w! Xtest2 4742093c0eSBram Moolenaar file Nop 4842093c0eSBram Moolenaar normal ggoyyyjjjozzzz 4942093c0eSBram Moolenaar set foldmethod=marker foldcolumn=4 5042093c0eSBram Moolenaar call assert_equal(0, &diff) 5142093c0eSBram Moolenaar call assert_equal('marker', &foldmethod) 5242093c0eSBram Moolenaar call assert_equal(4, &foldcolumn) 5342093c0eSBram Moolenaar call assert_equal(0, &scrollbind) 5442093c0eSBram Moolenaar call assert_equal(0, &cursorbind) 5542093c0eSBram Moolenaar call assert_equal(1, &wrap) 5642093c0eSBram Moolenaar 5742093c0eSBram Moolenaar vert diffsplit Xtest 5842093c0eSBram Moolenaar vert diffsplit Xtest2 5942093c0eSBram Moolenaar call assert_equal(1, &diff) 6042093c0eSBram Moolenaar call assert_equal('diff', &foldmethod) 6142093c0eSBram Moolenaar call assert_equal(2, &foldcolumn) 6242093c0eSBram Moolenaar call assert_equal(1, &scrollbind) 6342093c0eSBram Moolenaar call assert_equal(1, &cursorbind) 6442093c0eSBram Moolenaar call assert_equal(0, &wrap) 6542093c0eSBram Moolenaar 6642093c0eSBram Moolenaar let diff_fdm = &fdm 6742093c0eSBram Moolenaar let diff_fdc = &fdc 6842093c0eSBram Moolenaar " repeat entering diff mode here to see if this saves the wrong settings 6942093c0eSBram Moolenaar diffthis 7042093c0eSBram Moolenaar " jump to second window for a moment to have filler line appear at start of 7142093c0eSBram Moolenaar " first window 7242093c0eSBram Moolenaar wincmd w 7342093c0eSBram Moolenaar normal gg 7442093c0eSBram Moolenaar wincmd p 7542093c0eSBram Moolenaar normal gg 7642093c0eSBram Moolenaar call assert_equal(2, winline()) 7742093c0eSBram Moolenaar normal j 7842093c0eSBram Moolenaar call assert_equal(4, winline()) 7942093c0eSBram Moolenaar normal j 8042093c0eSBram Moolenaar call assert_equal(5, winline()) 8142093c0eSBram Moolenaar normal j 8242093c0eSBram Moolenaar call assert_equal(6, winline()) 8342093c0eSBram Moolenaar normal j 8442093c0eSBram Moolenaar call assert_equal(8, winline()) 8542093c0eSBram Moolenaar normal j 8642093c0eSBram Moolenaar call assert_equal(9, winline()) 8742093c0eSBram Moolenaar 8842093c0eSBram Moolenaar wincmd w 8942093c0eSBram Moolenaar normal gg 9042093c0eSBram Moolenaar call assert_equal(1, winline()) 9142093c0eSBram Moolenaar normal j 9242093c0eSBram Moolenaar call assert_equal(2, winline()) 9342093c0eSBram Moolenaar normal j 9442093c0eSBram Moolenaar call assert_equal(4, winline()) 9542093c0eSBram Moolenaar normal j 9642093c0eSBram Moolenaar call assert_equal(5, winline()) 9742093c0eSBram Moolenaar normal j 9842093c0eSBram Moolenaar call assert_equal(8, winline()) 9942093c0eSBram Moolenaar 10042093c0eSBram Moolenaar wincmd w 10142093c0eSBram Moolenaar normal gg 10242093c0eSBram Moolenaar call assert_equal(2, winline()) 10342093c0eSBram Moolenaar normal j 10442093c0eSBram Moolenaar call assert_equal(3, winline()) 10542093c0eSBram Moolenaar normal j 10642093c0eSBram Moolenaar call assert_equal(4, winline()) 10742093c0eSBram Moolenaar normal j 10842093c0eSBram Moolenaar call assert_equal(5, winline()) 10942093c0eSBram Moolenaar normal j 11042093c0eSBram Moolenaar call assert_equal(6, winline()) 11142093c0eSBram Moolenaar normal j 11242093c0eSBram Moolenaar call assert_equal(7, winline()) 11342093c0eSBram Moolenaar normal j 11442093c0eSBram Moolenaar call assert_equal(8, winline()) 11542093c0eSBram Moolenaar 11642093c0eSBram Moolenaar " Test diffoff 11742093c0eSBram Moolenaar diffoff! 11842093c0eSBram Moolenaar 1wincmd 2 11942093c0eSBram Moolenaar let &diff = 1 12042093c0eSBram Moolenaar let &fdm = diff_fdm 12142093c0eSBram Moolenaar let &fdc = diff_fdc 12242093c0eSBram Moolenaar 4wincmd w 12342093c0eSBram Moolenaar diffoff! 12442093c0eSBram Moolenaar 1wincmd w 12542093c0eSBram Moolenaar call assert_equal(0, &diff) 12642093c0eSBram Moolenaar call assert_equal('marker', &foldmethod) 12742093c0eSBram Moolenaar call assert_equal(4, &foldcolumn) 12842093c0eSBram Moolenaar call assert_equal(0, &scrollbind) 12942093c0eSBram Moolenaar call assert_equal(0, &cursorbind) 13042093c0eSBram Moolenaar call assert_equal(1, &wrap) 13142093c0eSBram Moolenaar 13242093c0eSBram Moolenaar wincmd w 13342093c0eSBram Moolenaar call assert_equal(0, &diff) 13442093c0eSBram Moolenaar call assert_equal('marker', &foldmethod) 13542093c0eSBram Moolenaar call assert_equal(4, &foldcolumn) 13642093c0eSBram Moolenaar call assert_equal(0, &scrollbind) 13742093c0eSBram Moolenaar call assert_equal(0, &cursorbind) 13842093c0eSBram Moolenaar call assert_equal(1, &wrap) 13942093c0eSBram Moolenaar 14042093c0eSBram Moolenaar wincmd w 14142093c0eSBram Moolenaar call assert_equal(0, &diff) 14242093c0eSBram Moolenaar call assert_equal('marker', &foldmethod) 14342093c0eSBram Moolenaar call assert_equal(4, &foldcolumn) 14442093c0eSBram Moolenaar call assert_equal(0, &scrollbind) 14542093c0eSBram Moolenaar call assert_equal(0, &cursorbind) 14642093c0eSBram Moolenaar call assert_equal(1, &wrap) 14742093c0eSBram Moolenaar 148623cf88fSBram Moolenaar call delete('Xtest') 149623cf88fSBram Moolenaar call delete('Xtest2') 15042093c0eSBram Moolenaar windo bw! 15142093c0eSBram Moolenaarendfunc 15242093c0eSBram Moolenaar 15342093c0eSBram Moolenaarfunc Test_filler_lines() 15442093c0eSBram Moolenaar " Test that diffing shows correct filler lines 15542093c0eSBram Moolenaar enew! 15642093c0eSBram Moolenaar put =range(4,10) 15742093c0eSBram Moolenaar 1d _ 15842093c0eSBram Moolenaar vnew 15942093c0eSBram Moolenaar put =range(1,10) 16042093c0eSBram Moolenaar 1d _ 16142093c0eSBram Moolenaar windo diffthis 16242093c0eSBram Moolenaar wincmd h 16342093c0eSBram Moolenaar call assert_equal(1, line('w0')) 16442093c0eSBram Moolenaar unlet! diff_fdm diff_fdc 16590d121faSBram Moolenaar windo diffoff 16690d121faSBram Moolenaar bwipe! 16790d121faSBram Moolenaar enew! 16890d121faSBram Moolenaarendfunc 16942093c0eSBram Moolenaar 17090d121faSBram Moolenaarfunc Test_diffget_diffput() 17190d121faSBram Moolenaar enew! 17290d121faSBram Moolenaar let l = range(50) 17390d121faSBram Moolenaar call setline(1, l) 17490d121faSBram Moolenaar call assert_fails('diffget', 'E99:') 17590d121faSBram Moolenaar diffthis 17690d121faSBram Moolenaar call assert_fails('diffget', 'E100:') 17790d121faSBram Moolenaar new 17890d121faSBram Moolenaar let l[10] = 'one' 17990d121faSBram Moolenaar let l[20] = 'two' 18090d121faSBram Moolenaar let l[30] = 'three' 18190d121faSBram Moolenaar let l[40] = 'four' 18290d121faSBram Moolenaar call setline(1, l) 18390d121faSBram Moolenaar diffthis 18490d121faSBram Moolenaar call assert_equal('one', getline(11)) 18590d121faSBram Moolenaar 11diffget 18690d121faSBram Moolenaar call assert_equal('10', getline(11)) 18790d121faSBram Moolenaar 21diffput 18890d121faSBram Moolenaar wincmd w 18990d121faSBram Moolenaar call assert_equal('two', getline(21)) 19090d121faSBram Moolenaar normal 31Gdo 19190d121faSBram Moolenaar call assert_equal('three', getline(31)) 19290d121faSBram Moolenaar call assert_equal('40', getline(41)) 19390d121faSBram Moolenaar normal 41Gdp 19490d121faSBram Moolenaar wincmd w 19590d121faSBram Moolenaar call assert_equal('40', getline(41)) 19690d121faSBram Moolenaar new 19790d121faSBram Moolenaar diffthis 19890d121faSBram Moolenaar call assert_fails('diffget', 'E101:') 19990d121faSBram Moolenaar 20090d121faSBram Moolenaar windo diffoff 20190d121faSBram Moolenaar bwipe! 20290d121faSBram Moolenaar bwipe! 20390d121faSBram Moolenaar enew! 20442093c0eSBram Moolenaarendfunc 205e67d546fSBram Moolenaar 206e67d546fSBram Moolenaarfunc Test_diffoff() 207e67d546fSBram Moolenaar enew! 208e67d546fSBram Moolenaar call setline(1, ['Two', 'Three']) 209e67d546fSBram Moolenaar let normattr = screenattr(1, 1) 210e67d546fSBram Moolenaar diffthis 211e67d546fSBram Moolenaar botright vert new 212e67d546fSBram Moolenaar call setline(1, ['One', '', 'Two', 'Three']) 213e67d546fSBram Moolenaar diffthis 214e67d546fSBram Moolenaar redraw 21525ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 216e67d546fSBram Moolenaar diffoff! 217e67d546fSBram Moolenaar redraw 218e67d546fSBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 219e67d546fSBram Moolenaar bwipe! 220e67d546fSBram Moolenaar bwipe! 221e67d546fSBram Moolenaarendfunc 222025e3e0bSBram Moolenaar 22325ea0544SBram Moolenaarfunc Test_diffoff_hidden() 22425ea0544SBram Moolenaar set diffopt=filler,foldcolumn:0 22525ea0544SBram Moolenaar e! one 22625ea0544SBram Moolenaar call setline(1, ['Two', 'Three']) 22725ea0544SBram Moolenaar let normattr = screenattr(1, 1) 22825ea0544SBram Moolenaar diffthis 22925ea0544SBram Moolenaar botright vert new two 23025ea0544SBram Moolenaar call setline(1, ['One', 'Four']) 23125ea0544SBram Moolenaar diffthis 23225ea0544SBram Moolenaar redraw 23325ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 23425ea0544SBram Moolenaar set hidden 23525ea0544SBram Moolenaar close 23625ea0544SBram Moolenaar redraw 23725ea0544SBram Moolenaar " diffing with hidden buffer two 23825ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 23925ea0544SBram Moolenaar diffoff 24025ea0544SBram Moolenaar redraw 24125ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 24225ea0544SBram Moolenaar diffthis 24325ea0544SBram Moolenaar redraw 24425ea0544SBram Moolenaar " still diffing with hidden buffer two 24525ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 24625ea0544SBram Moolenaar diffoff! 24725ea0544SBram Moolenaar redraw 24825ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 24925ea0544SBram Moolenaar diffthis 25025ea0544SBram Moolenaar redraw 25125ea0544SBram Moolenaar " no longer diffing with hidden buffer two 25225ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 25325ea0544SBram Moolenaar 25425ea0544SBram Moolenaar bwipe! 25525ea0544SBram Moolenaar bwipe! 25625ea0544SBram Moolenaar set hidden& diffopt& 25725ea0544SBram Moolenaarendfunc 25825ea0544SBram Moolenaar 259025e3e0bSBram Moolenaarfunc Test_setting_cursor() 260025e3e0bSBram Moolenaar new Xtest1 261025e3e0bSBram Moolenaar put =range(1,90) 262025e3e0bSBram Moolenaar wq 263025e3e0bSBram Moolenaar new Xtest2 264025e3e0bSBram Moolenaar put =range(1,100) 265025e3e0bSBram Moolenaar wq 266025e3e0bSBram Moolenaar 267025e3e0bSBram Moolenaar tabe Xtest2 268025e3e0bSBram Moolenaar $ 269025e3e0bSBram Moolenaar diffsp Xtest1 270025e3e0bSBram Moolenaar tabclose 271025e3e0bSBram Moolenaar 272025e3e0bSBram Moolenaar call delete('Xtest1') 273025e3e0bSBram Moolenaar call delete('Xtest2') 274025e3e0bSBram Moolenaarendfunc 275*aeb661e1SBram Moolenaar 276*aeb661e1SBram Moolenaarfunc Test_diff_move_to() 277*aeb661e1SBram Moolenaar new 278*aeb661e1SBram Moolenaar call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 279*aeb661e1SBram Moolenaar diffthis 280*aeb661e1SBram Moolenaar vnew 281*aeb661e1SBram Moolenaar call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x']) 282*aeb661e1SBram Moolenaar diffthis 283*aeb661e1SBram Moolenaar norm ]c 284*aeb661e1SBram Moolenaar call assert_equal(2, line('.')) 285*aeb661e1SBram Moolenaar norm 3]c 286*aeb661e1SBram Moolenaar call assert_equal(9, line('.')) 287*aeb661e1SBram Moolenaar norm 10]c 288*aeb661e1SBram Moolenaar call assert_equal(11, line('.')) 289*aeb661e1SBram Moolenaar norm [c 290*aeb661e1SBram Moolenaar call assert_equal(9, line('.')) 291*aeb661e1SBram Moolenaar norm 2[c 292*aeb661e1SBram Moolenaar call assert_equal(5, line('.')) 293*aeb661e1SBram Moolenaar norm 10[c 294*aeb661e1SBram Moolenaar call assert_equal(2, line('.')) 295*aeb661e1SBram Moolenaar %bwipe! 296*aeb661e1SBram Moolenaarendfunc 297*aeb661e1SBram Moolenaar 298*aeb661e1SBram Moolenaarfunc Test_diffpatch() 299*aeb661e1SBram Moolenaar " The patch program on MS-Windows may fail or hang. 300*aeb661e1SBram Moolenaar if !executable('patch') || !has('unix') 301*aeb661e1SBram Moolenaar return 302*aeb661e1SBram Moolenaar endif 303*aeb661e1SBram Moolenaar new 304*aeb661e1SBram Moolenaar insert 305*aeb661e1SBram Moolenaar*************** 306*aeb661e1SBram Moolenaar*** 1,3 **** 307*aeb661e1SBram Moolenaar 1 308*aeb661e1SBram Moolenaar! 2 309*aeb661e1SBram Moolenaar 3 310*aeb661e1SBram Moolenaar--- 1,4 ---- 311*aeb661e1SBram Moolenaar 1 312*aeb661e1SBram Moolenaar! 2x 313*aeb661e1SBram Moolenaar 3 314*aeb661e1SBram Moolenaar+ 4 315*aeb661e1SBram Moolenaar. 316*aeb661e1SBram Moolenaar saveas Xpatch 317*aeb661e1SBram Moolenaar bwipe! 318*aeb661e1SBram Moolenaar new 319*aeb661e1SBram Moolenaar call assert_fails('diffpatch Xpatch', 'E816:') 320*aeb661e1SBram Moolenaar call setline(1, ['1', '2', '3']) 321*aeb661e1SBram Moolenaar diffpatch Xpatch 322*aeb661e1SBram Moolenaar call assert_equal(['1', '2x', '3', '4'], getline(1, '$')) 323*aeb661e1SBram Moolenaar call delete('Xpatch') 324*aeb661e1SBram Moolenaar bwipe! 325*aeb661e1SBram Moolenaarendfunc 326*aeb661e1SBram Moolenaar 327*aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers() 328*aeb661e1SBram Moolenaar for i in range(1, 8) 329*aeb661e1SBram Moolenaar exe "new Xtest" . i 330*aeb661e1SBram Moolenaar diffthis 331*aeb661e1SBram Moolenaar endfor 332*aeb661e1SBram Moolenaar new Xtest9 333*aeb661e1SBram Moolenaar call assert_fails('diffthis', 'E96:') 334*aeb661e1SBram Moolenaar %bwipe! 335*aeb661e1SBram Moolenaarendfunc 336*aeb661e1SBram Moolenaar 337*aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable() 338*aeb661e1SBram Moolenaar new 339*aeb661e1SBram Moolenaar call setline(1, [1, 2, 3, 4]) 340*aeb661e1SBram Moolenaar setl nomodifiable 341*aeb661e1SBram Moolenaar diffthis 342*aeb661e1SBram Moolenaar vnew 343*aeb661e1SBram Moolenaar call setline(1, ['1x', 2, 3, 3, 4]) 344*aeb661e1SBram Moolenaar diffthis 345*aeb661e1SBram Moolenaar call assert_fails('norm dp', 'E793:') 346*aeb661e1SBram Moolenaar setl nomodifiable 347*aeb661e1SBram Moolenaar call assert_fails('norm do', 'E21:') 348*aeb661e1SBram Moolenaar %bwipe! 349*aeb661e1SBram Moolenaarendfunc 350