| " Tests for diff mode |
| set belloff=all |
| |
| func Test_diff_fold_sync() |
| enew! |
| let l = range(50) |
| call setline(1, l) |
| diffthis |
| let winone = win_getid() |
| new |
| let l[25] = 'diff' |
| call setline(1, l) |
| diffthis |
| let wintwo = win_getid() |
| " line 15 is inside the closed fold |
| call assert_equal(19, foldclosedend(10)) |
| call win_gotoid(winone) |
| call assert_equal(19, foldclosedend(10)) |
| " open the fold |
| normal zv |
| call assert_equal(-1, foldclosedend(10)) |
| " fold in other window must have opened too |
| call win_gotoid(wintwo) |
| call assert_equal(-1, foldclosedend(10)) |
| |
| " cursor position is in sync |
| normal 23G |
| call win_gotoid(winone) |
| call assert_equal(23, getcurpos()[1]) |
| |
| windo diffoff |
| close! |
| set nomodified |
| endfunc |
| |
| func Test_vert_split() |
| " Disable the title to avoid xterm keeping the wrong one. |
| set notitle noicon |
| new |
| let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee'] |
| call setline(1, l) |
| w! Xtest |
| normal dd |
| $ |
| put |
| normal kkrXoxxx |
| w! Xtest2 |
| file Nop |
| normal ggoyyyjjjozzzz |
| set foldmethod=marker foldcolumn=4 |
| call assert_equal(0, &diff) |
| call assert_equal('marker', &foldmethod) |
| call assert_equal(4, &foldcolumn) |
| call assert_equal(0, &scrollbind) |
| call assert_equal(0, &cursorbind) |
| call assert_equal(1, &wrap) |
| |
| vert diffsplit Xtest |
| vert diffsplit Xtest2 |
| call assert_equal(1, &diff) |
| call assert_equal('diff', &foldmethod) |
| call assert_equal(2, &foldcolumn) |
| call assert_equal(1, &scrollbind) |
| call assert_equal(1, &cursorbind) |
| call assert_equal(0, &wrap) |
| |
| let diff_fdm = &fdm |
| let diff_fdc = &fdc |
| " repeat entering diff mode here to see if this saves the wrong settings |
| diffthis |
| " jump to second window for a moment to have filler line appear at start of |
| " first window |
| wincmd w |
| normal gg |
| wincmd p |
| normal gg |
| call assert_equal(2, winline()) |
| normal j |
| call assert_equal(4, winline()) |
| normal j |
| call assert_equal(5, winline()) |
| normal j |
| call assert_equal(6, winline()) |
| normal j |
| call assert_equal(8, winline()) |
| normal j |
| call assert_equal(9, winline()) |
| |
| wincmd w |
| normal gg |
| call assert_equal(1, winline()) |
| normal j |
| call assert_equal(2, winline()) |
| normal j |
| call assert_equal(4, winline()) |
| normal j |
| call assert_equal(5, winline()) |
| normal j |
| call assert_equal(8, winline()) |
| |
| wincmd w |
| normal gg |
| call assert_equal(2, winline()) |
| normal j |
| call assert_equal(3, winline()) |
| normal j |
| call assert_equal(4, winline()) |
| normal j |
| call assert_equal(5, winline()) |
| normal j |
| call assert_equal(6, winline()) |
| normal j |
| call assert_equal(7, winline()) |
| normal j |
| call assert_equal(8, winline()) |
| |
| " Test diffoff |
| diffoff! |
| 1wincmd 2 |
| let &diff = 1 |
| let &fdm = diff_fdm |
| let &fdc = diff_fdc |
| 4wincmd w |
| diffoff! |
| 1wincmd w |
| call assert_equal(0, &diff) |
| call assert_equal('marker', &foldmethod) |
| call assert_equal(4, &foldcolumn) |
| call assert_equal(0, &scrollbind) |
| call assert_equal(0, &cursorbind) |
| call assert_equal(1, &wrap) |
| |
| wincmd w |
| call assert_equal(0, &diff) |
| call assert_equal('marker', &foldmethod) |
| call assert_equal(4, &foldcolumn) |
| call assert_equal(0, &scrollbind) |
| call assert_equal(0, &cursorbind) |
| call assert_equal(1, &wrap) |
| |
| wincmd w |
| call assert_equal(0, &diff) |
| call assert_equal('marker', &foldmethod) |
| call assert_equal(4, &foldcolumn) |
| call assert_equal(0, &scrollbind) |
| call assert_equal(0, &cursorbind) |
| call assert_equal(1, &wrap) |
| |
| call delete('Xtest') |
| call delete('Xtest2') |
| windo bw! |
| endfunc |
| |
| func Test_filler_lines() |
| " Test that diffing shows correct filler lines |
| enew! |
| put =range(4,10) |
| 1d _ |
| vnew |
| put =range(1,10) |
| 1d _ |
| windo diffthis |
| wincmd h |
| call assert_equal(1, line('w0')) |
| unlet! diff_fdm diff_fdc |
| windo diffoff |
| bwipe! |
| enew! |
| endfunc |
| |
| func Test_diffget_diffput() |
| enew! |
| let l = range(50) |
| call setline(1, l) |
| call assert_fails('diffget', 'E99:') |
| diffthis |
| call assert_fails('diffget', 'E100:') |
| new |
| let l[10] = 'one' |
| let l[20] = 'two' |
| let l[30] = 'three' |
| let l[40] = 'four' |
| call setline(1, l) |
| diffthis |
| call assert_equal('one', getline(11)) |
| 11diffget |
| call assert_equal('10', getline(11)) |
| 21diffput |
| wincmd w |
| call assert_equal('two', getline(21)) |
| normal 31Gdo |
| call assert_equal('three', getline(31)) |
| call assert_equal('40', getline(41)) |
| normal 41Gdp |
| wincmd w |
| call assert_equal('40', getline(41)) |
| new |
| diffthis |
| call assert_fails('diffget', 'E101:') |
| |
| windo diffoff |
| bwipe! |
| bwipe! |
| enew! |
| endfunc |
| |
| func Test_diffoff() |
| enew! |
| call setline(1, ['Two', 'Three']) |
| let normattr = screenattr(1, 1) |
| diffthis |
| botright vert new |
| call setline(1, ['One', '', 'Two', 'Three']) |
| diffthis |
| redraw |
| call assert_notequal(normattr, screenattr(1, 1)) |
| diffoff! |
| redraw |
| call assert_equal(normattr, screenattr(1, 1)) |
| bwipe! |
| bwipe! |
| endfunc |
| |
| func Test_diffoff_hidden() |
| set diffopt=filler,foldcolumn:0 |
| e! one |
| call setline(1, ['Two', 'Three']) |
| let normattr = screenattr(1, 1) |
| diffthis |
| botright vert new two |
| call setline(1, ['One', 'Four']) |
| diffthis |
| redraw |
| call assert_notequal(normattr, screenattr(1, 1)) |
| set hidden |
| close |
| redraw |
| " diffing with hidden buffer two |
| call assert_notequal(normattr, screenattr(1, 1)) |
| diffoff |
| redraw |
| call assert_equal(normattr, screenattr(1, 1)) |
| diffthis |
| redraw |
| " still diffing with hidden buffer two |
| call assert_notequal(normattr, screenattr(1, 1)) |
| diffoff! |
| redraw |
| call assert_equal(normattr, screenattr(1, 1)) |
| diffthis |
| redraw |
| " no longer diffing with hidden buffer two |
| call assert_equal(normattr, screenattr(1, 1)) |
| |
| bwipe! |
| bwipe! |
| set hidden& diffopt& |
| endfunc |
| |
| func Test_setting_cursor() |
| new Xtest1 |
| put =range(1,90) |
| wq |
| new Xtest2 |
| put =range(1,100) |
| wq |
| |
| tabe Xtest2 |
| $ |
| diffsp Xtest1 |
| tabclose |
| |
| call delete('Xtest1') |
| call delete('Xtest2') |
| endfunc |
| |
| func Test_diff_move_to() |
| new |
| call setline(1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) |
| diffthis |
| vnew |
| call setline(1, [1, '2x', 3, 4, 4, 5, '6x', 7, '8x', 9, '10x']) |
| diffthis |
| norm ]c |
| call assert_equal(2, line('.')) |
| norm 3]c |
| call assert_equal(9, line('.')) |
| norm 10]c |
| call assert_equal(11, line('.')) |
| norm [c |
| call assert_equal(9, line('.')) |
| norm 2[c |
| call assert_equal(5, line('.')) |
| norm 10[c |
| call assert_equal(2, line('.')) |
| %bwipe! |
| endfunc |
| |
| func Test_diffpatch() |
| " The patch program on MS-Windows may fail or hang. |
| if !executable('patch') || !has('unix') |
| return |
| endif |
| new |
| insert |
| *************** |
| *** 1,3 **** |
| 1 |
| ! 2 |
| 3 |
| --- 1,4 ---- |
| 1 |
| ! 2x |
| 3 |
| + 4 |
| . |
| saveas Xpatch |
| bwipe! |
| new |
| call assert_fails('diffpatch Xpatch', 'E816:') |
| |
| for name in ['Xpatch', 'Xpatch$HOME', 'Xpa''tch'] |
| call setline(1, ['1', '2', '3']) |
| if name != 'Xpatch' |
| call rename('Xpatch', name) |
| endif |
| exe 'diffpatch ' . escape(name, '$') |
| call assert_equal(['1', '2x', '3', '4'], getline(1, '$')) |
| if name != 'Xpatch' |
| call rename(name, 'Xpatch') |
| endif |
| bwipe! |
| endfor |
| |
| call delete('Xpatch') |
| bwipe! |
| endfunc |
| |
| func Test_diff_too_many_buffers() |
| for i in range(1, 8) |
| exe "new Xtest" . i |
| diffthis |
| endfor |
| new Xtest9 |
| call assert_fails('diffthis', 'E96:') |
| %bwipe! |
| endfunc |
| |
| func Test_diff_nomodifiable() |
| new |
| call setline(1, [1, 2, 3, 4]) |
| setl nomodifiable |
| diffthis |
| vnew |
| call setline(1, ['1x', 2, 3, 3, 4]) |
| diffthis |
| call assert_fails('norm dp', 'E793:') |
| setl nomodifiable |
| call assert_fails('norm do', 'E21:') |
| %bwipe! |
| endfunc |
| |
| func Test_diff_lastline() |
| enew! |
| only! |
| call setline(1, ['This is a ', 'line with five ', 'rows']) |
| diffthis |
| botright vert new |
| call setline(1, ['This is', 'a line with ', 'four rows']) |
| diffthis |
| 1 |
| call feedkeys("Je a\<CR>", 'tx') |
| call feedkeys("Je a\<CR>", 'tx') |
| let w1lines = winline() |
| wincmd w |
| $ |
| let w2lines = winline() |
| call assert_equal(w2lines, w1lines) |
| bwipe! |
| bwipe! |
| endfunc |