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 245*ae7dba89SBram Moolenaarfunc Test_diffget_diffput_completion() 246*ae7dba89SBram Moolenaar new Xdiff1 | diffthis 247*ae7dba89SBram Moolenaar new Xdiff2 | diffthis 248*ae7dba89SBram Moolenaar new Xdiff3 | diffthis 249*ae7dba89SBram Moolenaar new Xdiff4 250*ae7dba89SBram Moolenaar 251*ae7dba89SBram Moolenaar " :diffput and :diffget completes names of buffers which 252*ae7dba89SBram Moolenaar " are in diff mode and which are different then current buffer. 253*ae7dba89SBram Moolenaar b Xdiff1 254*ae7dba89SBram Moolenaar call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx') 255*ae7dba89SBram Moolenaar call assert_equal('"diffput Xdiff2 Xdiff3', @:) 256*ae7dba89SBram Moolenaar call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx') 257*ae7dba89SBram Moolenaar call assert_equal('"diffget Xdiff2 Xdiff3', @:) 258*ae7dba89SBram Moolenaar call assert_equal(['Xdiff2', 'Xdiff3'], getcompletion('', 'diff_buffer')) 259*ae7dba89SBram Moolenaar 260*ae7dba89SBram Moolenaar b Xdiff2 261*ae7dba89SBram Moolenaar call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx') 262*ae7dba89SBram Moolenaar call assert_equal('"diffput Xdiff1 Xdiff3', @:) 263*ae7dba89SBram Moolenaar call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx') 264*ae7dba89SBram Moolenaar call assert_equal('"diffget Xdiff1 Xdiff3', @:) 265*ae7dba89SBram Moolenaar call assert_equal(['Xdiff1', 'Xdiff3'], getcompletion('', 'diff_buffer')) 266*ae7dba89SBram Moolenaar 267*ae7dba89SBram Moolenaar b Xdiff3 268*ae7dba89SBram Moolenaar call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx') 269*ae7dba89SBram Moolenaar call assert_equal('"diffput Xdiff1 Xdiff2', @:) 270*ae7dba89SBram Moolenaar call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx') 271*ae7dba89SBram Moolenaar call assert_equal('"diffget Xdiff1 Xdiff2', @:) 272*ae7dba89SBram Moolenaar call assert_equal(['Xdiff1', 'Xdiff2'], getcompletion('', 'diff_buffer')) 273*ae7dba89SBram Moolenaar 274*ae7dba89SBram Moolenaar " No completion when in Xdiff4, it's not in diff mode. 275*ae7dba89SBram Moolenaar b Xdiff4 276*ae7dba89SBram Moolenaar call feedkeys(":diffput \<C-A>\<C-B>\"\<CR>", 'tx') 277*ae7dba89SBram Moolenaar call assert_equal('"diffput ', @:) 278*ae7dba89SBram Moolenaar call feedkeys(":diffget \<C-A>\<C-B>\"\<CR>", 'tx') 279*ae7dba89SBram Moolenaar call assert_equal('"diffget ', @:) 280*ae7dba89SBram Moolenaar call assert_equal([], getcompletion('', 'diff_buffer')) 281*ae7dba89SBram Moolenaar 282*ae7dba89SBram Moolenaar %bwipe 283*ae7dba89SBram Moolenaarendfunc 284*ae7dba89SBram Moolenaar 28579a213d6SBram Moolenaarfunc Test_dp_do_buffer() 28679a213d6SBram Moolenaar e! one 28779a213d6SBram Moolenaar let bn1=bufnr('%') 28879a213d6SBram Moolenaar let l = range(60) 28979a213d6SBram Moolenaar call setline(1, l) 29079a213d6SBram Moolenaar diffthis 29179a213d6SBram Moolenaar 29279a213d6SBram Moolenaar new two 29379a213d6SBram Moolenaar let l[10] = 'one' 29479a213d6SBram Moolenaar let l[20] = 'two' 29579a213d6SBram Moolenaar let l[30] = 'three' 29679a213d6SBram Moolenaar let l[40] = 'four' 29779a213d6SBram Moolenaar let l[50] = 'five' 29879a213d6SBram Moolenaar call setline(1, l) 29979a213d6SBram Moolenaar diffthis 30079a213d6SBram Moolenaar 30179a213d6SBram Moolenaar " dp and do with invalid buffer number. 30279a213d6SBram Moolenaar 11 30379a213d6SBram Moolenaar call assert_fails('norm 99999dp', 'E102:') 30479a213d6SBram Moolenaar call assert_fails('norm 99999do', 'E102:') 30579a213d6SBram Moolenaar call assert_fails('diffput non_existing_buffer', 'E94:') 30679a213d6SBram Moolenaar call assert_fails('diffget non_existing_buffer', 'E94:') 30779a213d6SBram Moolenaar 30879a213d6SBram Moolenaar " dp and do with valid buffer number. 30979a213d6SBram Moolenaar call assert_equal('one', getline('.')) 31079a213d6SBram Moolenaar exe 'norm ' . bn1 . 'do' 31179a213d6SBram Moolenaar call assert_equal('10', getline('.')) 31279a213d6SBram Moolenaar 21 31379a213d6SBram Moolenaar call assert_equal('two', getline('.')) 31479a213d6SBram Moolenaar diffget one 31579a213d6SBram Moolenaar call assert_equal('20', getline('.')) 31679a213d6SBram Moolenaar 31779a213d6SBram Moolenaar 31 31879a213d6SBram Moolenaar exe 'norm ' . bn1 . 'dp' 31979a213d6SBram Moolenaar 41 32079a213d6SBram Moolenaar diffput one 32179a213d6SBram Moolenaar wincmd w 32279a213d6SBram Moolenaar 31 32379a213d6SBram Moolenaar call assert_equal('three', getline('.')) 32479a213d6SBram Moolenaar 41 32579a213d6SBram Moolenaar call assert_equal('four', getline('.')) 32679a213d6SBram Moolenaar 32779a213d6SBram Moolenaar " dp and do with buffer number which is not in diff mode. 32879a213d6SBram Moolenaar new not_in_diff_mode 32979a213d6SBram Moolenaar let bn3=bufnr('%') 33079a213d6SBram Moolenaar wincmd w 33179a213d6SBram Moolenaar 51 33279a213d6SBram Moolenaar call assert_fails('exe "norm" . bn3 . "dp"', 'E103:') 33379a213d6SBram Moolenaar call assert_fails('exe "norm" . bn3 . "do"', 'E103:') 33479a213d6SBram Moolenaar call assert_fails('diffput not_in_diff_mode', 'E94:') 33579a213d6SBram Moolenaar call assert_fails('diffget not_in_diff_mode', 'E94:') 33679a213d6SBram Moolenaar 33779a213d6SBram Moolenaar windo diffoff 33879a213d6SBram Moolenaar %bwipe! 33942093c0eSBram Moolenaarendfunc 340e67d546fSBram Moolenaar 341df77cef9SBram Moolenaarfunc Test_do_lastline() 342df77cef9SBram Moolenaar e! one 343df77cef9SBram Moolenaar call setline(1, ['1','2','3','4','5','6']) 344df77cef9SBram Moolenaar diffthis 345df77cef9SBram Moolenaar 346df77cef9SBram Moolenaar new two 347df77cef9SBram Moolenaar call setline(1, ['2','4','5']) 348df77cef9SBram Moolenaar diffthis 349df77cef9SBram Moolenaar 350df77cef9SBram Moolenaar 1 351df77cef9SBram Moolenaar norm dp]c 352df77cef9SBram Moolenaar norm dp]c 353df77cef9SBram Moolenaar wincmd w 354df77cef9SBram Moolenaar call assert_equal(4, line('$')) 355df77cef9SBram Moolenaar norm G 356df77cef9SBram Moolenaar norm do 357df77cef9SBram Moolenaar call assert_equal(3, line('$')) 358df77cef9SBram Moolenaar 359df77cef9SBram Moolenaar windo diffoff 360df77cef9SBram Moolenaar %bwipe! 361df77cef9SBram Moolenaarendfunc 362df77cef9SBram Moolenaar 363e67d546fSBram Moolenaarfunc Test_diffoff() 364e67d546fSBram Moolenaar enew! 365e67d546fSBram Moolenaar call setline(1, ['Two', 'Three']) 36679a213d6SBram Moolenaar redraw 367e67d546fSBram Moolenaar let normattr = screenattr(1, 1) 368e67d546fSBram Moolenaar diffthis 369e67d546fSBram Moolenaar botright vert new 370e67d546fSBram Moolenaar call setline(1, ['One', '', 'Two', 'Three']) 371e67d546fSBram Moolenaar diffthis 372e67d546fSBram Moolenaar redraw 373196b4664SBram Moolenaar call assert_notequal(normattr, 1->screenattr(1)) 374e67d546fSBram Moolenaar diffoff! 375e67d546fSBram Moolenaar redraw 376e67d546fSBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 377e67d546fSBram Moolenaar bwipe! 378e67d546fSBram Moolenaar bwipe! 379e67d546fSBram Moolenaarendfunc 380025e3e0bSBram Moolenaar 381e828b762SBram Moolenaarfunc Common_icase_test() 382e828b762SBram Moolenaar edit one 383da22b8ccSBram Moolenaar call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve']) 38479a213d6SBram Moolenaar redraw 38579a213d6SBram Moolenaar let normattr = screenattr(1, 1) 38679a213d6SBram Moolenaar diffthis 38779a213d6SBram Moolenaar 38879a213d6SBram Moolenaar botright vert new two 389da22b8ccSBram Moolenaar call setline(1, ['one', 'TWO', 'Three ', 'Four', 'fI=VE']) 39079a213d6SBram Moolenaar diffthis 39179a213d6SBram Moolenaar 39279a213d6SBram Moolenaar redraw 39379a213d6SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 39479a213d6SBram Moolenaar call assert_equal(normattr, screenattr(2, 1)) 39579a213d6SBram Moolenaar call assert_notequal(normattr, screenattr(3, 1)) 39679a213d6SBram Moolenaar call assert_equal(normattr, screenattr(4, 1)) 39779a213d6SBram Moolenaar 398da22b8ccSBram Moolenaar let dtextattr = screenattr(5, 3) 399da22b8ccSBram Moolenaar call assert_notequal(dtextattr, screenattr(5, 1)) 400da22b8ccSBram Moolenaar call assert_notequal(dtextattr, screenattr(5, 5)) 401da22b8ccSBram Moolenaar 40279a213d6SBram Moolenaar diffoff! 40379a213d6SBram Moolenaar %bwipe! 404e828b762SBram Moolenaarendfunc 405e828b762SBram Moolenaar 406e828b762SBram Moolenaarfunc Test_diffopt_icase() 407e828b762SBram Moolenaar set diffopt=icase,foldcolumn:0 408e828b762SBram Moolenaar call Common_icase_test() 40979a213d6SBram Moolenaar set diffopt& 41079a213d6SBram Moolenaarendfunc 41179a213d6SBram Moolenaar 412e828b762SBram Moolenaarfunc Test_diffopt_icase_internal() 413e828b762SBram Moolenaar set diffopt=icase,foldcolumn:0,internal 414e828b762SBram Moolenaar call Common_icase_test() 415e828b762SBram Moolenaar set diffopt& 416e828b762SBram Moolenaarendfunc 41779a213d6SBram Moolenaar 418e828b762SBram Moolenaarfunc Common_iwhite_test() 419e828b762SBram Moolenaar edit one 420e828b762SBram Moolenaar " Difference in trailing spaces and amount of spaces should be ignored, 42179a213d6SBram Moolenaar " but not other space differences. 422e828b762SBram Moolenaar call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four']) 42379a213d6SBram Moolenaar redraw 42479a213d6SBram Moolenaar let normattr = screenattr(1, 1) 42579a213d6SBram Moolenaar diffthis 42679a213d6SBram Moolenaar 42779a213d6SBram Moolenaar botright vert new two 428e828b762SBram Moolenaar call setline(1, ["One\t ", "Two\t ", 'Three', 'one two', 'onetwo', ' Four']) 42979a213d6SBram Moolenaar diffthis 43079a213d6SBram Moolenaar 43179a213d6SBram Moolenaar redraw 43279a213d6SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 43379a213d6SBram Moolenaar call assert_equal(normattr, screenattr(2, 1)) 43479a213d6SBram Moolenaar call assert_equal(normattr, screenattr(3, 1)) 435e828b762SBram Moolenaar call assert_equal(normattr, screenattr(4, 1)) 436e828b762SBram Moolenaar call assert_notequal(normattr, screenattr(5, 1)) 437e828b762SBram Moolenaar call assert_notequal(normattr, screenattr(6, 1)) 43879a213d6SBram Moolenaar 43979a213d6SBram Moolenaar diffoff! 44079a213d6SBram Moolenaar %bwipe! 441e828b762SBram Moolenaarendfunc 442e828b762SBram Moolenaar 443e828b762SBram Moolenaarfunc Test_diffopt_iwhite() 444e828b762SBram Moolenaar set diffopt=iwhite,foldcolumn:0 445e828b762SBram Moolenaar call Common_iwhite_test() 446e828b762SBram Moolenaar set diffopt& 447e828b762SBram Moolenaarendfunc 448e828b762SBram Moolenaar 449e828b762SBram Moolenaarfunc Test_diffopt_iwhite_internal() 450e828b762SBram Moolenaar set diffopt=internal,iwhite,foldcolumn:0 451e828b762SBram Moolenaar call Common_iwhite_test() 45279a213d6SBram Moolenaar set diffopt& 45379a213d6SBram Moolenaarendfunc 45479a213d6SBram Moolenaar 45579a213d6SBram Moolenaarfunc Test_diffopt_context() 45679a213d6SBram Moolenaar enew! 45779a213d6SBram Moolenaar call setline(1, ['1', '2', '3', '4', '5', '6', '7']) 45879a213d6SBram Moolenaar diffthis 45979a213d6SBram Moolenaar new 46079a213d6SBram Moolenaar call setline(1, ['1', '2', '3', '4', '5x', '6', '7']) 46179a213d6SBram Moolenaar diffthis 46279a213d6SBram Moolenaar 46379a213d6SBram Moolenaar set diffopt=context:2 46479a213d6SBram Moolenaar call assert_equal('+-- 2 lines: 1', foldtextresult(1)) 465e828b762SBram Moolenaar set diffopt=internal,context:2 466e828b762SBram Moolenaar call assert_equal('+-- 2 lines: 1', foldtextresult(1)) 467e828b762SBram Moolenaar 46879a213d6SBram Moolenaar set diffopt=context:1 46979a213d6SBram Moolenaar call assert_equal('+-- 3 lines: 1', foldtextresult(1)) 470e828b762SBram Moolenaar set diffopt=internal,context:1 471e828b762SBram Moolenaar call assert_equal('+-- 3 lines: 1', foldtextresult(1)) 47279a213d6SBram Moolenaar 47379a213d6SBram Moolenaar diffoff! 47479a213d6SBram Moolenaar %bwipe! 47579a213d6SBram Moolenaar set diffopt& 47679a213d6SBram Moolenaarendfunc 47779a213d6SBram Moolenaar 47879a213d6SBram Moolenaarfunc Test_diffopt_horizontal() 479e828b762SBram Moolenaar set diffopt=internal,horizontal 48079a213d6SBram Moolenaar diffsplit 48179a213d6SBram Moolenaar 48279a213d6SBram Moolenaar call assert_equal(&columns, winwidth(1)) 48379a213d6SBram Moolenaar call assert_equal(&columns, winwidth(2)) 48479a213d6SBram Moolenaar call assert_equal(&lines, winheight(1) + winheight(2) + 3) 48579a213d6SBram Moolenaar call assert_inrange(0, 1, winheight(1) - winheight(2)) 48679a213d6SBram Moolenaar 48779a213d6SBram Moolenaar set diffopt& 48879a213d6SBram Moolenaar diffoff! 48979a213d6SBram Moolenaar %bwipe 49079a213d6SBram Moolenaarendfunc 49179a213d6SBram Moolenaar 49279a213d6SBram Moolenaarfunc Test_diffopt_vertical() 493e828b762SBram Moolenaar set diffopt=internal,vertical 49479a213d6SBram Moolenaar diffsplit 49579a213d6SBram Moolenaar 49679a213d6SBram Moolenaar call assert_equal(&lines - 2, winheight(1)) 49779a213d6SBram Moolenaar call assert_equal(&lines - 2, winheight(2)) 49879a213d6SBram Moolenaar call assert_equal(&columns, winwidth(1) + winwidth(2) + 1) 49979a213d6SBram Moolenaar call assert_inrange(0, 1, winwidth(1) - winwidth(2)) 50079a213d6SBram Moolenaar 50179a213d6SBram Moolenaar set diffopt& 50279a213d6SBram Moolenaar diffoff! 50379a213d6SBram Moolenaar %bwipe 50479a213d6SBram Moolenaarendfunc 50579a213d6SBram Moolenaar 50697ce4192SBram Moolenaarfunc Test_diffopt_hiddenoff() 507e828b762SBram Moolenaar set diffopt=internal,filler,foldcolumn:0,hiddenoff 50897ce4192SBram Moolenaar e! one 50997ce4192SBram Moolenaar call setline(1, ['Two', 'Three']) 51097ce4192SBram Moolenaar redraw 51197ce4192SBram Moolenaar let normattr = screenattr(1, 1) 51297ce4192SBram Moolenaar diffthis 51397ce4192SBram Moolenaar botright vert new two 51497ce4192SBram Moolenaar call setline(1, ['One', 'Four']) 51597ce4192SBram Moolenaar diffthis 51697ce4192SBram Moolenaar redraw 51797ce4192SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 51897ce4192SBram Moolenaar set hidden 51997ce4192SBram Moolenaar close 52097ce4192SBram Moolenaar redraw 52197ce4192SBram Moolenaar " should not diffing with hidden buffer two while 'hiddenoff' is enabled 52297ce4192SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 52397ce4192SBram Moolenaar 52497ce4192SBram Moolenaar bwipe! 52597ce4192SBram Moolenaar bwipe! 52697ce4192SBram Moolenaar set hidden& diffopt& 52797ce4192SBram Moolenaarendfunc 52897ce4192SBram Moolenaar 52925ea0544SBram Moolenaarfunc Test_diffoff_hidden() 530e828b762SBram Moolenaar set diffopt=internal,filler,foldcolumn:0 53125ea0544SBram Moolenaar e! one 53225ea0544SBram Moolenaar call setline(1, ['Two', 'Three']) 53379a213d6SBram Moolenaar redraw 53425ea0544SBram Moolenaar let normattr = screenattr(1, 1) 53525ea0544SBram Moolenaar diffthis 53625ea0544SBram Moolenaar botright vert new two 53725ea0544SBram Moolenaar call setline(1, ['One', 'Four']) 53825ea0544SBram Moolenaar diffthis 53925ea0544SBram Moolenaar redraw 54025ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 54125ea0544SBram Moolenaar set hidden 54225ea0544SBram Moolenaar close 54325ea0544SBram Moolenaar redraw 54425ea0544SBram Moolenaar " diffing with hidden buffer two 54525ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 54625ea0544SBram Moolenaar diffoff 54725ea0544SBram Moolenaar redraw 54825ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 54925ea0544SBram Moolenaar diffthis 55025ea0544SBram Moolenaar redraw 55125ea0544SBram Moolenaar " still diffing with hidden buffer two 55225ea0544SBram Moolenaar call assert_notequal(normattr, screenattr(1, 1)) 55325ea0544SBram Moolenaar diffoff! 55425ea0544SBram Moolenaar redraw 55525ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 55625ea0544SBram Moolenaar diffthis 55725ea0544SBram Moolenaar redraw 55825ea0544SBram Moolenaar " no longer diffing with hidden buffer two 55925ea0544SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 56025ea0544SBram Moolenaar 56125ea0544SBram Moolenaar bwipe! 56225ea0544SBram Moolenaar bwipe! 56325ea0544SBram Moolenaar set hidden& diffopt& 56425ea0544SBram Moolenaarendfunc 56525ea0544SBram Moolenaar 566025e3e0bSBram Moolenaarfunc Test_setting_cursor() 567025e3e0bSBram Moolenaar new Xtest1 568025e3e0bSBram Moolenaar put =range(1,90) 569025e3e0bSBram Moolenaar wq 570025e3e0bSBram Moolenaar new Xtest2 571025e3e0bSBram Moolenaar put =range(1,100) 572025e3e0bSBram Moolenaar wq 573025e3e0bSBram Moolenaar 574025e3e0bSBram Moolenaar tabe Xtest2 575025e3e0bSBram Moolenaar $ 576025e3e0bSBram Moolenaar diffsp Xtest1 577025e3e0bSBram Moolenaar tabclose 578025e3e0bSBram Moolenaar 579025e3e0bSBram Moolenaar call delete('Xtest1') 580025e3e0bSBram Moolenaar call delete('Xtest2') 581025e3e0bSBram Moolenaarendfunc 582aeb661e1SBram Moolenaar 583aeb661e1SBram Moolenaarfunc Test_diff_move_to() 584aeb661e1SBram Moolenaar new 585aeb661e1SBram Moolenaar call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 586aeb661e1SBram Moolenaar diffthis 587aeb661e1SBram Moolenaar vnew 588aeb661e1SBram Moolenaar call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x']) 589aeb661e1SBram Moolenaar diffthis 590aeb661e1SBram Moolenaar norm ]c 591aeb661e1SBram Moolenaar call assert_equal(2, line('.')) 592aeb661e1SBram Moolenaar norm 3]c 593aeb661e1SBram Moolenaar call assert_equal(9, line('.')) 594aeb661e1SBram Moolenaar norm 10]c 595aeb661e1SBram Moolenaar call assert_equal(11, line('.')) 596aeb661e1SBram Moolenaar norm [c 597aeb661e1SBram Moolenaar call assert_equal(9, line('.')) 598aeb661e1SBram Moolenaar norm 2[c 599aeb661e1SBram Moolenaar call assert_equal(5, line('.')) 600aeb661e1SBram Moolenaar norm 10[c 601aeb661e1SBram Moolenaar call assert_equal(2, line('.')) 602aeb661e1SBram Moolenaar %bwipe! 603aeb661e1SBram Moolenaarendfunc 604aeb661e1SBram Moolenaar 60579a213d6SBram Moolenaarfunc Test_diffexpr() 60679a213d6SBram Moolenaar if !executable('diff') 60779a213d6SBram Moolenaar return 60879a213d6SBram Moolenaar endif 60979a213d6SBram Moolenaar 61079a213d6SBram Moolenaar func DiffExpr() 6113b8defd0SBram Moolenaar " Prepent some text to check diff type detection 6123b8defd0SBram Moolenaar call writefile(['warning', ' message'], v:fname_out) 6133b8defd0SBram Moolenaar silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>>' . v:fname_out 61479a213d6SBram Moolenaar endfunc 61579a213d6SBram Moolenaar set diffexpr=DiffExpr() 61679a213d6SBram Moolenaar set diffopt=foldcolumn:0 61779a213d6SBram Moolenaar 61879a213d6SBram Moolenaar enew! 61979a213d6SBram Moolenaar call setline(1, ['one', 'two', 'three']) 62079a213d6SBram Moolenaar redraw 62179a213d6SBram Moolenaar let normattr = screenattr(1, 1) 62279a213d6SBram Moolenaar diffthis 62379a213d6SBram Moolenaar 62479a213d6SBram Moolenaar botright vert new 62579a213d6SBram Moolenaar call setline(1, ['one', 'two', 'three.']) 62679a213d6SBram Moolenaar diffthis 62779a213d6SBram Moolenaar 62879a213d6SBram Moolenaar redraw 62979a213d6SBram Moolenaar call assert_equal(normattr, screenattr(1, 1)) 63079a213d6SBram Moolenaar call assert_equal(normattr, screenattr(2, 1)) 63179a213d6SBram Moolenaar call assert_notequal(normattr, screenattr(3, 1)) 63279a213d6SBram Moolenaar 63379a213d6SBram Moolenaar diffoff! 63479a213d6SBram Moolenaar %bwipe! 63579a213d6SBram Moolenaar set diffexpr& diffopt& 63679a213d6SBram Moolenaarendfunc 63779a213d6SBram Moolenaar 638aeb661e1SBram Moolenaarfunc Test_diffpatch() 639aeb661e1SBram Moolenaar " The patch program on MS-Windows may fail or hang. 640aeb661e1SBram Moolenaar if !executable('patch') || !has('unix') 641aeb661e1SBram Moolenaar return 642aeb661e1SBram Moolenaar endif 643aeb661e1SBram Moolenaar new 644aeb661e1SBram Moolenaar insert 645aeb661e1SBram Moolenaar*************** 646aeb661e1SBram Moolenaar*** 1,3 **** 647aeb661e1SBram Moolenaar 1 648aeb661e1SBram Moolenaar! 2 649aeb661e1SBram Moolenaar 3 650aeb661e1SBram Moolenaar--- 1,4 ---- 651aeb661e1SBram Moolenaar 1 652aeb661e1SBram Moolenaar! 2x 653aeb661e1SBram Moolenaar 3 654aeb661e1SBram Moolenaar+ 4 655aeb661e1SBram Moolenaar. 65697fbc404SBram Moolenaar saveas! Xpatch 657aeb661e1SBram Moolenaar bwipe! 658aeb661e1SBram Moolenaar new 659aeb661e1SBram Moolenaar call assert_fails('diffpatch Xpatch', 'E816:') 6601ef73e33SBram Moolenaar 661a95ab321SBram Moolenaar for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch'] 662aeb661e1SBram Moolenaar call setline(1, ['1', '2', '3']) 6631ef73e33SBram Moolenaar if name != 'Xpatch' 6641ef73e33SBram Moolenaar call rename('Xpatch', name) 6651ef73e33SBram Moolenaar endif 6661ef73e33SBram Moolenaar exe 'diffpatch ' . escape(name, '$') 667aeb661e1SBram Moolenaar call assert_equal(['1', '2x', '3', '4'], getline(1, '$')) 6681ef73e33SBram Moolenaar if name != 'Xpatch' 6691ef73e33SBram Moolenaar call rename(name, 'Xpatch') 6701ef73e33SBram Moolenaar endif 6711ef73e33SBram Moolenaar bwipe! 6721ef73e33SBram Moolenaar endfor 6731ef73e33SBram Moolenaar 674aeb661e1SBram Moolenaar call delete('Xpatch') 675aeb661e1SBram Moolenaar bwipe! 676aeb661e1SBram Moolenaarendfunc 677aeb661e1SBram Moolenaar 678aeb661e1SBram Moolenaarfunc Test_diff_too_many_buffers() 679aeb661e1SBram Moolenaar for i in range(1, 8) 680aeb661e1SBram Moolenaar exe "new Xtest" . i 681aeb661e1SBram Moolenaar diffthis 682aeb661e1SBram Moolenaar endfor 683aeb661e1SBram Moolenaar new Xtest9 684aeb661e1SBram Moolenaar call assert_fails('diffthis', 'E96:') 685aeb661e1SBram Moolenaar %bwipe! 686aeb661e1SBram Moolenaarendfunc 687aeb661e1SBram Moolenaar 688aeb661e1SBram Moolenaarfunc Test_diff_nomodifiable() 689aeb661e1SBram Moolenaar new 690aeb661e1SBram Moolenaar call setline(1, [1, 2, 3, 4]) 691aeb661e1SBram Moolenaar setl nomodifiable 692aeb661e1SBram Moolenaar diffthis 693aeb661e1SBram Moolenaar vnew 694aeb661e1SBram Moolenaar call setline(1, ['1x', 2, 3, 3, 4]) 695aeb661e1SBram Moolenaar diffthis 696aeb661e1SBram Moolenaar call assert_fails('norm dp', 'E793:') 697aeb661e1SBram Moolenaar setl nomodifiable 698aeb661e1SBram Moolenaar call assert_fails('norm do', 'E21:') 699aeb661e1SBram Moolenaar %bwipe! 700aeb661e1SBram Moolenaarendfunc 701f58a8475SBram Moolenaar 70297fbc404SBram Moolenaarfunc Test_diff_hlID() 70397fbc404SBram Moolenaar new 70497fbc404SBram Moolenaar call setline(1, [1, 2, 3]) 70597fbc404SBram Moolenaar diffthis 70697fbc404SBram Moolenaar vnew 70797fbc404SBram Moolenaar call setline(1, ['1x', 2, 'x', 3]) 70897fbc404SBram Moolenaar diffthis 70997fbc404SBram Moolenaar redraw 71097fbc404SBram Moolenaar 711a74e4946SBram Moolenaar call diff_hlID(-1, 1)->synIDattr("name")->assert_equal("") 71297fbc404SBram Moolenaar 713a74e4946SBram Moolenaar call diff_hlID(1, 1)->synIDattr("name")->assert_equal("DiffChange") 714a74e4946SBram Moolenaar call diff_hlID(1, 2)->synIDattr("name")->assert_equal("DiffText") 715a74e4946SBram Moolenaar call diff_hlID(2, 1)->synIDattr("name")->assert_equal("") 716a74e4946SBram Moolenaar call diff_hlID(3, 1)->synIDattr("name")->assert_equal("DiffAdd") 7171a3a8916SBram Moolenaar eval 4->diff_hlID(1)->synIDattr("name")->assert_equal("") 71897fbc404SBram Moolenaar 71997fbc404SBram Moolenaar wincmd w 72097fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange") 72197fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(2, 1), "name"), "") 72297fbc404SBram Moolenaar call assert_equal(synIDattr(diff_hlID(3, 1), "name"), "") 72397fbc404SBram Moolenaar 72497fbc404SBram Moolenaar %bwipe! 72597fbc404SBram Moolenaarendfunc 72697fbc404SBram Moolenaar 72797fbc404SBram Moolenaarfunc Test_diff_filler() 72897fbc404SBram Moolenaar new 72997fbc404SBram Moolenaar call setline(1, [1, 2, 3, 'x', 4]) 73097fbc404SBram Moolenaar diffthis 73197fbc404SBram Moolenaar vnew 73297fbc404SBram Moolenaar call setline(1, [1, 2, 'y', 'y', 3, 4]) 73397fbc404SBram Moolenaar diffthis 73497fbc404SBram Moolenaar redraw 73597fbc404SBram Moolenaar 7361a3a8916SBram Moolenaar call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 'v:val->diff_filler()')) 73797fbc404SBram Moolenaar wincmd w 73897fbc404SBram Moolenaar call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 'diff_filler(v:val)')) 73997fbc404SBram Moolenaar 74097fbc404SBram Moolenaar %bwipe! 74197fbc404SBram Moolenaarendfunc 74297fbc404SBram Moolenaar 743f58a8475SBram Moolenaarfunc Test_diff_lastline() 744f58a8475SBram Moolenaar enew! 745f58a8475SBram Moolenaar only! 746f58a8475SBram Moolenaar call setline(1, ['This is a ', 'line with five ', 'rows']) 747f58a8475SBram Moolenaar diffthis 748f58a8475SBram Moolenaar botright vert new 749f58a8475SBram Moolenaar call setline(1, ['This is', 'a line with ', 'four rows']) 750f58a8475SBram Moolenaar diffthis 751f58a8475SBram Moolenaar 1 752f58a8475SBram Moolenaar call feedkeys("Je a\<CR>", 'tx') 753f58a8475SBram Moolenaar call feedkeys("Je a\<CR>", 'tx') 754f58a8475SBram Moolenaar let w1lines = winline() 755f58a8475SBram Moolenaar wincmd w 756f58a8475SBram Moolenaar $ 757f58a8475SBram Moolenaar let w2lines = winline() 758f58a8475SBram Moolenaar call assert_equal(w2lines, w1lines) 759f58a8475SBram Moolenaar bwipe! 760f58a8475SBram Moolenaar bwipe! 761f58a8475SBram Moolenaarendfunc 762e828b762SBram Moolenaar 763785fc656SBram Moolenaarfunc WriteDiffFiles(buf, list1, list2) 764e828b762SBram Moolenaar call writefile(a:list1, 'Xfile1') 765e828b762SBram Moolenaar call writefile(a:list2, 'Xfile2') 766785fc656SBram Moolenaar if a:buf 767785fc656SBram Moolenaar call term_sendkeys(a:buf, ":checktime\<CR>") 768785fc656SBram Moolenaar endif 769e828b762SBram Moolenaarendfunc 770e828b762SBram Moolenaar 771785fc656SBram Moolenaar" Verify a screendump with both the internal and external diff. 772e828b762SBram Moolenaarfunc VerifyBoth(buf, dumpfile, extra) 773e828b762SBram Moolenaar " trailing : for leaving the cursor on the command line 774785fc656SBram Moolenaar for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"] 775e828b762SBram Moolenaar call term_sendkeys(a:buf, cmd) 776e828b762SBram Moolenaar if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external') 777e828b762SBram Moolenaar break " don't let the next iteration overwrite the "failed" file. 778e828b762SBram Moolenaar endif 779e828b762SBram Moolenaar endfor 780e828b762SBram Moolenaarendfunc 781e828b762SBram Moolenaar 782785fc656SBram Moolenaar" Verify a screendump with the internal diff only. 783785fc656SBram Moolenaarfunc VerifyInternal(buf, dumpfile, extra) 784785fc656SBram Moolenaar call term_sendkeys(a:buf, ":diffupdate!\<CR>") 785785fc656SBram Moolenaar " trailing : for leaving the cursor on the command line 786785fc656SBram Moolenaar call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:") 78737d9f175SBram Moolenaar call term_wait(a:buf) 788785fc656SBram Moolenaar call VerifyScreenDump(a:buf, a:dumpfile, {}) 789785fc656SBram Moolenaarendfunc 790785fc656SBram Moolenaar 791e828b762SBram Moolenaarfunc Test_diff_screen() 7923c8ee629SBram Moolenaar CheckScreendump 7933c8ee629SBram Moolenaar CheckFeature menu 7943c8ee629SBram Moolenaar 795e828b762SBram Moolenaar " clean up already existing swap files, just in case 796e828b762SBram Moolenaar call delete('.Xfile1.swp') 797e828b762SBram Moolenaar call delete('.Xfile2.swp') 798e828b762SBram Moolenaar 799e828b762SBram Moolenaar " Test 1: Add a line in beginning of file 2 800785fc656SBram 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]) 801e828b762SBram Moolenaar let buf = RunVimInTerminal('-d Xfile1 Xfile2', {}) 8028ee4c01bSBram Moolenaar " Set autoread mode, so that Vim won't complain once we re-write the test 803e828b762SBram Moolenaar " files 804785fc656SBram Moolenaar call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w") 805e828b762SBram Moolenaar 806e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_01', '') 807e828b762SBram Moolenaar 808e828b762SBram Moolenaar " Test 2: Add a line in beginning of file 1 809785fc656SBram 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]) 810e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_02', '') 811e828b762SBram Moolenaar 812e828b762SBram Moolenaar " Test 3: Add a line at the end of file 2 813785fc656SBram 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]) 814e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_03', '') 815e828b762SBram Moolenaar 816e828b762SBram Moolenaar " Test 4: Add a line at the end of file 1 817785fc656SBram 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]) 818e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_04', '') 819e828b762SBram Moolenaar 820e828b762SBram Moolenaar " Test 5: Add a line in the middle of file 2, remove on at the end of file 1 821785fc656SBram 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]) 822e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_05', '') 823e828b762SBram Moolenaar 824e828b762SBram Moolenaar " Test 6: Add a line in the middle of file 1, remove on at the end of file 2 825785fc656SBram 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]) 826e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_06', '') 827e828b762SBram Moolenaar 828b9ddda6cSBram Moolenaar " Variants on test 6 with different context settings 829b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt+=context:2\<cr>") 830b9ddda6cSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_06.2', {}) 831b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt-=context:2\<cr>") 832b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt+=context:1\<cr>") 833b9ddda6cSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_06.1', {}) 834b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt-=context:1\<cr>") 835b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt+=context:0\<cr>") 836b9ddda6cSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_06.0', {}) 837b9ddda6cSBram Moolenaar call term_sendkeys(buf, ":set diffopt-=context:0\<cr>") 838b9ddda6cSBram Moolenaar 839e828b762SBram Moolenaar " Test 7 - 9: Test normal/patience/histogram diff algorithm 840785fc656SBram Moolenaar call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{', 841e828b762SBram Moolenaar \ ' int i;', ' for(i = 0; i < 10; i++)', ' {', ' printf("Your answer is: ");', 842e828b762SBram Moolenaar \ ' printf("%d\n", foo);', ' }', '}', '', 'int fact(int n)', '{', ' if(n > 1)', ' {', 843e828b762SBram Moolenaar \ ' return fact(n-1) * n;', ' }', ' return 1;', '}', '', 'int main(int argc, char **argv)', 844e828b762SBram Moolenaar \ '{', ' frobnitz(fact(10));', '}'], 845e828b762SBram Moolenaar \ ['#include <stdio.h>', '', 'int fib(int n)', '{', ' if(n > 2)', ' {', 846e828b762SBram Moolenaar \ ' return fib(n-1) + fib(n-2);', ' }', ' return 1;', '}', '', '// Frobs foo heartily', 847e828b762SBram Moolenaar \ 'int frobnitz(int foo)', '{', ' int i;', ' for(i = 0; i < 10; i++)', ' {', 848e828b762SBram Moolenaar \ ' printf("%d\n", foo);', ' }', '}', '', 849e828b762SBram Moolenaar \ 'int main(int argc, char **argv)', '{', ' frobnitz(fib(10));', '}']) 850e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 851e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 852e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_07', {}) 853e828b762SBram Moolenaar 854e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>") 855e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_08', {}) 856e828b762SBram Moolenaar 857e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>") 858e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_09', {}) 859e828b762SBram Moolenaar 860e828b762SBram Moolenaar " Test 10-11: normal/indent-heuristic 861e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt&vim\<cr>") 862785fc656SBram Moolenaar call WriteDiffFiles(buf, ['', ' def finalize(values)', '', ' values.each do |v|', ' v.finalize', ' end'], 863e828b762SBram Moolenaar \ ['', ' def finalize(values)', '', ' values.each do |v|', ' v.prepare', ' end', '', 864e828b762SBram Moolenaar \ ' values.each do |v|', ' v.finalize', ' end']) 865e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 866e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 867e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_10', {}) 868e828b762SBram Moolenaar 869b6fc7285SBram Moolenaar " Leave trailing : at commandline! 870b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>:\<cr>") 871b6fc7285SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_11', {}, 'one') 872b6fc7285SBram Moolenaar " shouldn't matter, if indent-algorithm comes before or after the algorithm 873b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt&\<cr>") 874b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=indent-heuristic,algorithm:patience\<cr>:\<cr>") 875b6fc7285SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_11', {}, 'two') 876b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt&\<cr>") 877b6fc7285SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=algorithm:patience,indent-heuristic\<cr>:\<cr>") 878b6fc7285SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_11', {}, 'three') 879e828b762SBram Moolenaar 880e828b762SBram Moolenaar " Test 12: diff the same file 881785fc656SBram Moolenaar call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 882e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_12', '') 883e828b762SBram Moolenaar 884e828b762SBram Moolenaar " Test 13: diff an empty file 885785fc656SBram Moolenaar call WriteDiffFiles(buf, [], []) 886e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_13', '') 887e828b762SBram Moolenaar 888e828b762SBram Moolenaar " Test 14: test diffopt+=icase 889785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe']) 890e828b762SBram Moolenaar call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase") 891e828b762SBram Moolenaar 892e828b762SBram Moolenaar " Test 15-16: test diffopt+=iwhite 893785fc656SBram Moolenaar call WriteDiffFiles(buf, ['int main()', '{', ' printf("Hello, World!");', ' return 0;', '}'], 894e828b762SBram Moolenaar \ ['int main()', '{', ' if (0)', ' {', ' printf("Hello, World!");', ' return 0;', ' }', '}']) 895e828b762SBram Moolenaar call term_sendkeys(buf, ":diffupdate!\<cr>") 896e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>") 897e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_15', {}) 898e828b762SBram Moolenaar call term_sendkeys(buf, ":set diffopt+=internal\<cr>") 899e828b762SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_16', {}) 900e828b762SBram Moolenaar 901785fc656SBram Moolenaar " Test 17: test diffopt+=iblank 902785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy']) 903785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank") 904785fc656SBram Moolenaar 905785fc656SBram Moolenaar " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol 906785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite") 907785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall") 908785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol") 909785fc656SBram Moolenaar 910785fc656SBram Moolenaar " Test 19: test diffopt+=iwhiteeol 911785fc656SBram Moolenaar call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar']) 912785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol") 913785fc656SBram Moolenaar 914785fc656SBram Moolenaar " Test 19: test diffopt+=iwhiteall 915785fc656SBram Moolenaar call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall") 916785fc656SBram Moolenaar 917e828b762SBram Moolenaar " clean up 918e828b762SBram Moolenaar call StopVimInTerminal(buf) 919e828b762SBram Moolenaar call delete('Xfile1') 920e828b762SBram Moolenaar call delete('Xfile2') 921e828b762SBram Moolenaarendfunc 922e828b762SBram Moolenaar 9234a5abbd6SBram Moolenaarfunc Test_diff_with_cursorline() 9243c8ee629SBram Moolenaar CheckScreendump 9254a5abbd6SBram Moolenaar 9264a5abbd6SBram Moolenaar call writefile([ 9274a5abbd6SBram Moolenaar \ 'hi CursorLine ctermbg=red ctermfg=white', 9284a5abbd6SBram Moolenaar \ 'set cursorline', 9294a5abbd6SBram Moolenaar \ 'call setline(1, ["foo","foo","foo","bar"])', 9304a5abbd6SBram Moolenaar \ 'vnew', 9314a5abbd6SBram Moolenaar \ 'call setline(1, ["bee","foo","foo","baz"])', 9324a5abbd6SBram Moolenaar \ 'windo diffthis', 9334a5abbd6SBram Moolenaar \ '2wincmd w', 9344a5abbd6SBram Moolenaar \ ], 'Xtest_diff_cursorline') 9354a5abbd6SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {}) 9364a5abbd6SBram Moolenaar 9374a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {}) 9384a5abbd6SBram Moolenaar call term_sendkeys(buf, "j") 9394a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {}) 9404a5abbd6SBram Moolenaar call term_sendkeys(buf, "j") 9414a5abbd6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {}) 9424a5abbd6SBram Moolenaar 9434a5abbd6SBram Moolenaar " clean up 9444a5abbd6SBram Moolenaar call StopVimInTerminal(buf) 9454a5abbd6SBram Moolenaar call delete('Xtest_diff_cursorline') 9464a5abbd6SBram Moolenaarendfunc 947f7acf2b6SBram Moolenaar 948248fdb33SBram Moolenaarfunc Test_diff_with_syntax() 949248fdb33SBram Moolenaar CheckScreendump 950248fdb33SBram Moolenaar 951248fdb33SBram Moolenaar let lines =<< trim END 952248fdb33SBram Moolenaar void doNothing() { 953248fdb33SBram Moolenaar int x = 0; 954248fdb33SBram Moolenaar char *s = "hello"; 955248fdb33SBram Moolenaar return 5; 956248fdb33SBram Moolenaar } 957248fdb33SBram Moolenaar END 958248fdb33SBram Moolenaar call writefile(lines, 'Xprogram1.c') 959248fdb33SBram Moolenaar let lines =<< trim END 960248fdb33SBram Moolenaar void doSomething() { 961248fdb33SBram Moolenaar int x = 0; 962248fdb33SBram Moolenaar char *s = "there"; 963248fdb33SBram Moolenaar return 5; 964248fdb33SBram Moolenaar } 965248fdb33SBram Moolenaar END 966248fdb33SBram Moolenaar call writefile(lines, 'Xprogram2.c') 967248fdb33SBram Moolenaar 968248fdb33SBram Moolenaar let lines =<< trim END 969248fdb33SBram Moolenaar edit Xprogram1.c 970248fdb33SBram Moolenaar diffsplit Xprogram2.c 971248fdb33SBram Moolenaar END 972248fdb33SBram Moolenaar call writefile(lines, 'Xtest_diff_syntax') 973248fdb33SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_syntax', {}) 974248fdb33SBram Moolenaar 975248fdb33SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_syntax_1', {}) 976248fdb33SBram Moolenaar 977248fdb33SBram Moolenaar " clean up 978248fdb33SBram Moolenaar call StopVimInTerminal(buf) 979248fdb33SBram Moolenaar call delete('Xtest_diff_syntax') 980248fdb33SBram Moolenaar call delete('Xprogram1.c') 981248fdb33SBram Moolenaar call delete('Xprogram2.c') 982248fdb33SBram Moolenaarendfunc 983248fdb33SBram Moolenaar 984f7acf2b6SBram Moolenaarfunc Test_diff_of_diff() 9853c8ee629SBram Moolenaar CheckScreendump 9863c8ee629SBram Moolenaar CheckFeature rightleft 987f7acf2b6SBram Moolenaar 988f7acf2b6SBram Moolenaar call writefile([ 989f7acf2b6SBram Moolenaar \ 'call setline(1, ["aa","bb","cc","@@ -3,2 +5,7 @@","dd","ee","ff"])', 990f7acf2b6SBram Moolenaar \ 'vnew', 991f7acf2b6SBram Moolenaar \ 'call setline(1, ["aa","bb","cc"])', 992f7acf2b6SBram Moolenaar \ 'windo diffthis', 9938ee4c01bSBram Moolenaar \ '1wincmd w', 9948ee4c01bSBram Moolenaar \ 'setlocal number', 995f7acf2b6SBram Moolenaar \ ], 'Xtest_diff_diff') 996f7acf2b6SBram Moolenaar let buf = RunVimInTerminal('-S Xtest_diff_diff', {}) 997f7acf2b6SBram Moolenaar 998f7acf2b6SBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_of_diff_01', {}) 999f7acf2b6SBram Moolenaar 1000e73f911cSBram Moolenaar call term_sendkeys(buf, ":set rightleft\<cr>") 1001e73f911cSBram Moolenaar call VerifyScreenDump(buf, 'Test_diff_of_diff_02', {}) 1002e73f911cSBram Moolenaar 1003f7acf2b6SBram Moolenaar " clean up 1004f7acf2b6SBram Moolenaar call StopVimInTerminal(buf) 1005f7acf2b6SBram Moolenaar call delete('Xtest_diff_diff') 1006f7acf2b6SBram Moolenaarendfunc 1007c8234779SBram Moolenaar 1008c8234779SBram Moolenaarfunc CloseoffSetup() 1009c8234779SBram Moolenaar enew 1010c8234779SBram Moolenaar call setline(1, ['one', 'two', 'three']) 1011c8234779SBram Moolenaar diffthis 1012c8234779SBram Moolenaar new 1013c8234779SBram Moolenaar call setline(1, ['one', 'tow', 'three']) 1014c8234779SBram Moolenaar diffthis 1015c8234779SBram Moolenaar call assert_equal(1, &diff) 1016c8234779SBram Moolenaar only! 1017c8234779SBram Moolenaarendfunc 1018c8234779SBram Moolenaar 1019c8234779SBram Moolenaarfunc Test_diff_closeoff() 1020c8234779SBram Moolenaar " "closeoff" included by default: last diff win gets 'diff' reset' 1021c8234779SBram Moolenaar call CloseoffSetup() 1022c8234779SBram Moolenaar call assert_equal(0, &diff) 1023c8234779SBram Moolenaar enew! 1024c8234779SBram Moolenaar 1025c8234779SBram Moolenaar " "closeoff" excluded: last diff win keeps 'diff' set' 1026c8234779SBram Moolenaar set diffopt-=closeoff 1027c8234779SBram Moolenaar call CloseoffSetup() 1028c8234779SBram Moolenaar call assert_equal(1, &diff) 1029c8234779SBram Moolenaar diffoff! 1030c8234779SBram Moolenaar enew! 1031c8234779SBram Moolenaarendfunc 1032f4a1d1c0SBram Moolenaar 1033f4a1d1c0SBram Moolenaarfunc Test_diff_maintains_change_mark() 1034f4a1d1c0SBram Moolenaar enew! 1035f4a1d1c0SBram Moolenaar call setline(1, ['a', 'b', 'c', 'd']) 1036f4a1d1c0SBram Moolenaar diffthis 1037f4a1d1c0SBram Moolenaar new 1038f4a1d1c0SBram Moolenaar call setline(1, ['a', 'b', 'c', 'e']) 1039f4a1d1c0SBram Moolenaar " Set '[ and '] marks 1040f4a1d1c0SBram Moolenaar 2,3yank 1041f4a1d1c0SBram Moolenaar call assert_equal([2, 3], [line("'["), line("']")]) 1042f4a1d1c0SBram Moolenaar " Verify they aren't affected by the implicit diff 1043f4a1d1c0SBram Moolenaar diffthis 1044f4a1d1c0SBram Moolenaar call assert_equal([2, 3], [line("'["), line("']")]) 1045f4a1d1c0SBram Moolenaar " Verify they aren't affected by an explicit diff 1046f4a1d1c0SBram Moolenaar diffupdate 1047f4a1d1c0SBram Moolenaar call assert_equal([2, 3], [line("'["), line("']")]) 1048f4a1d1c0SBram Moolenaar bwipe! 1049f4a1d1c0SBram Moolenaar bwipe! 1050f4a1d1c0SBram Moolenaarendfunc 1051