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