mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 11:58:17 +00:00

Problem: Last diff folds not merged (after v8.1.1922)
Solution: loop over all windows in the current tabpage and update all
folds (Gary Johnson)
This commit fixes a bug where the last two folds of a diff are not
merged when the last difference between the two diff'd buffers is
resolved.
Normally, when two buffers are diff'd, folding is used to show only the
text that differs and to hide the text that is the same between the two
buffers. When a difference is resolved by making a block of text the
same in both buffers, the folds are updated to merge that block with the
folds above and below it into one closed fold.
That updating of the folds did not occur when the block of text was the
last diff block in the buffers.
The bug was introduced by this patch on August 24, 2019:
patch 8.1.1922: in diff mode global operations can be very slow
Problem: In diff mode global operations can be very slow.
Solution: Do not call diff_redraw() many times, call it once when
redrawing. And also don't update folds multiple times.
Unfortunately, folds were then not updated often enough.
The problem was fixed by adding a short loop to the ex_diffgetput()
function in diff.c to update all the folds in the current tab when the
last difference is removed.
A test for this was added to test_diffmode.vim. Two of the reference
screen dumps for another test in that file,
Test_diffget_diffput_linematch(), had to be changed to have all the
folds closed rather than to have the last diff block remain open.
closes: vim/vim#17457
3fa0d3514b
Co-authored-by: Gary Johnson <garyjohn@spocom.com>
1113 lines
80 KiB
Lua
1113 lines
80 KiB
Lua
local t = require('test.testutil')
|
|
local n = require('test.functional.testnvim')()
|
|
local Screen = require('test.functional.ui.screen')
|
|
|
|
local feed = n.feed
|
|
local clear = n.clear
|
|
local write_file = t.write_file
|
|
|
|
describe('Diff mode screen with 3 diffs open', function()
|
|
local fname = 'Xtest-functional-diff-screen-1'
|
|
local fname_2 = fname .. '.2'
|
|
local fname_3 = fname .. '.3'
|
|
local screen
|
|
|
|
local reread = function()
|
|
feed(':e<cr><c-w>w:e<cr><c-w>w:e<cr><c-w>w')
|
|
end
|
|
|
|
setup(function()
|
|
clear()
|
|
os.remove(fname)
|
|
os.remove(fname_2)
|
|
os.remove(fname_3)
|
|
end)
|
|
|
|
teardown(function()
|
|
os.remove(fname)
|
|
os.remove(fname_2)
|
|
os.remove(fname_3)
|
|
end)
|
|
|
|
before_each(function()
|
|
clear()
|
|
feed(':set diffopt+=linematch:30<cr>')
|
|
feed(':e ' .. fname .. '<cr>')
|
|
feed(':vnew ' .. fname_2 .. '<cr>')
|
|
feed(':vnew ' .. fname_3 .. '<cr>')
|
|
feed(':windo diffthis<cr>')
|
|
|
|
screen = Screen.new(100, 16)
|
|
feed('<c-w>=')
|
|
feed(':windo set nu!<cr>')
|
|
end)
|
|
|
|
describe(
|
|
'setup the diff screen to look like a merge conflict with 3 files in diff mode',
|
|
function()
|
|
before_each(function()
|
|
local f1 = [[
|
|
|
|
common line
|
|
AAA
|
|
AAA
|
|
AAA
|
|
]]
|
|
local f2 = [[
|
|
|
|
common line
|
|
<<<<<<< HEAD
|
|
AAA
|
|
AAA
|
|
AAA
|
|
=======
|
|
BBB
|
|
BBB
|
|
BBB
|
|
>>>>>>> branch1
|
|
]]
|
|
local f3 = [[
|
|
|
|
common line
|
|
BBB
|
|
BBB
|
|
BBB
|
|
]]
|
|
|
|
write_file(fname, f1, false)
|
|
write_file(fname_2, f2, false)
|
|
write_file(fname_3, f3, false)
|
|
reread()
|
|
end)
|
|
|
|
it('get from window 1', function()
|
|
feed('1<c-w>w')
|
|
feed(':2,6diffget screen-1.2<cr>')
|
|
screen:expect([[
|
|
{7: }{8: 1 }^ │{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }{4:<<<<<<< HEAD }│{7: }{8: 3 }{4:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: 4 } AAA │{7: }{8: 4 } AAA │{7: }{8: 3 } AAA |
|
|
{7: }{8: 5 } AAA │{7: }{8: 5 } AAA │{7: }{8: 4 } AAA |
|
|
{7: }{8: 6 } AAA │{7: }{8: 6 } AAA │{7: }{8: 5 } AAA |
|
|
{7: }{8: 7 }{4:======= }│{7: }{8: 7 }{4:======= }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: 8 }{4: BBB }│{7: }{8: 8 }{4: BBB }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: 9 }{4: BBB }│{7: }{8: 9 }{4: BBB }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: 10 }{4: BBB }│{7: }{8: 10 }{4: BBB }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: 11 }{4:>>>>>>> branch1 }│{7: }{8: 11 }{4:>>>>>>> branch1 }│{7: }{8: }{23:---------------------------}|
|
|
{1:~ }│{1:~ }│{1:~ }|*3
|
|
{3:<-functional-diff-screen-1.3 [+] }{2:<est-functional-diff-screen-1.2 Xtest-functional-diff-screen-1 }|
|
|
:2,6diffget screen-1.2 |
|
|
]])
|
|
end)
|
|
|
|
it('get from window 2', function()
|
|
feed('2<c-w>w')
|
|
feed(':5,7diffget screen-1.3<cr>')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 }^ │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 4 }{4: AAA }│{7: }{8: 3 }{4: AAA }|
|
|
{7: }{8: 3 }{4: BBB }│{7: }{8: 5 }{4: BBB }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: 4 }{4: }{27:BBB}{4: }│{7: }{8: 6 }{4: }{27:BBB}{4: }│{7: }{8: 4 }{4: }{27:AAA}{4: }|
|
|
{7: }{8: 5 }{4: }{27:BBB}{4: }│{7: }{8: 7 }{4: }{27:BBB}{4: }│{7: }{8: 5 }{4: }{27:AAA}{4: }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 8 }{22:>>>>>>> branch1 }│{7: }{8: }{23:---------------------------}|
|
|
{1:~ }│{1:~ }│{1:~ }|*6
|
|
{2:Xtest-functional-diff-screen-1.3 }{3:<functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:5,7diffget screen-1.3 |
|
|
]])
|
|
end)
|
|
|
|
it('get from window 3', function()
|
|
feed('3<c-w>w')
|
|
feed(':5,6diffget screen-1.2<cr>')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } │{7: }{8: 1 }^ |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 4 }{4: AAA }│{7: }{8: 3 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 5 }{4: AAA }│{7: }{8: 4 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 6 }{4: AAA }│{7: }{8: 5 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 7 }{4:======= }│{7: }{8: 6 }{4:======= }|
|
|
{7: }{8: 3 } BBB │{7: }{8: 8 } BBB │{7: }{8: 7 } BBB |
|
|
{7: }{8: 4 } BBB │{7: }{8: 9 } BBB │{7: }{8: 8 } BBB |
|
|
{7: }{8: 5 } BBB │{7: }{8: 10 } BBB │{7: }{8: 9 } BBB |
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 11 }{4:>>>>>>> branch1 }│{7: }{8: 10 }{4:>>>>>>> branch1 }|
|
|
{1:~ }│{1:~ }│{1:~ }|*3
|
|
{2:Xtest-functional-diff-screen-1.3 <est-functional-diff-screen-1.2 }{3:<st-functional-diff-screen-1 [+] }|
|
|
:5,6diffget screen-1.2 |
|
|
]])
|
|
end)
|
|
|
|
it('put from window 2 - part', function()
|
|
feed('2<c-w>w')
|
|
feed(':6,8diffput screen-1<cr>')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 }^ │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 4 }{4: AAA }│{7: }{8: 3 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 5 }{4: AAA }│{7: }{8: 4 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 6 }{4: AAA }│{7: }{8: 5 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 7 }{4:======= }│{7: }{8: 6 }{4:======= }|
|
|
{7: }{8: 3 }{4: BBB }│{7: }{8: 8 }{4: BBB }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: 4 }{4: BBB }│{7: }{8: 9 }{4: BBB }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: 5 } BBB │{7: }{8: 10 } BBB │{7: }{8: 7 } BBB |
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 11 }{22:>>>>>>> branch1 }│{7: }{8: }{23:---------------------------}|
|
|
{1:~ }│{1:~ }│{1:~ }|*3
|
|
{2:Xtest-functional-diff-screen-1.3 }{3:<est-functional-diff-screen-1.2 }{2:<st-functional-diff-screen-1 [+] }|
|
|
:6,8diffput screen-1 |
|
|
]])
|
|
end)
|
|
it('put from window 2 - part to end', function()
|
|
feed('2<c-w>w')
|
|
feed(':6,11diffput screen-1<cr>')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 }^ │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 3 }{22:<<<<<<< HEAD }│{7: }{8: }{23:---------------------------}|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 4 }{4: AAA }│{7: }{8: 3 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 5 }{4: AAA }│{7: }{8: 4 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 6 }{4: AAA }│{7: }{8: 5 }{4: AAA }|
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 7 }{4:======= }│{7: }{8: 6 }{4:======= }|
|
|
{7: }{8: 3 } BBB │{7: }{8: 8 } BBB │{7: }{8: 7 } BBB |
|
|
{7: }{8: 4 } BBB │{7: }{8: 9 } BBB │{7: }{8: 8 } BBB |
|
|
{7: }{8: 5 } BBB │{7: }{8: 10 } BBB │{7: }{8: 9 } BBB |
|
|
{7: }{8: }{23:---------------------------}│{7: }{8: 11 }{4:>>>>>>> branch1 }│{7: }{8: 10 }{4:>>>>>>> branch1 }|
|
|
{1:~ }│{1:~ }│{1:~ }|*3
|
|
{2:Xtest-functional-diff-screen-1.3 }{3:<est-functional-diff-screen-1.2 }{2:<st-functional-diff-screen-1 [+] }|
|
|
:6,11diffput screen-1 |
|
|
]])
|
|
end)
|
|
end
|
|
)
|
|
end)
|
|
|
|
describe('Diff mode screen with 2 diffs open', function()
|
|
local fname = 'Xtest-functional-diff-screen-1'
|
|
local fname_2 = fname .. '.2'
|
|
local screen
|
|
|
|
local reread = function()
|
|
feed(':e<cr><c-w>w:e<cr><c-w>w:e<cr><c-w>w')
|
|
end
|
|
|
|
setup(function()
|
|
clear()
|
|
os.remove(fname)
|
|
os.remove(fname_2)
|
|
end)
|
|
|
|
teardown(function()
|
|
os.remove(fname)
|
|
os.remove(fname_2)
|
|
end)
|
|
|
|
before_each(function()
|
|
clear()
|
|
feed(':e ' .. fname .. '<cr>')
|
|
feed(':vnew ' .. fname_2 .. '<cr>')
|
|
feed(':windo diffthis<cr>')
|
|
|
|
screen = Screen.new(100, 20)
|
|
feed('<c-w>=')
|
|
feed(':windo set nu!<cr>')
|
|
end)
|
|
|
|
describe('setup a diff with 2 files and set linematch:30', function()
|
|
before_each(function()
|
|
feed(':set diffopt+=linematch:30<cr>')
|
|
local f1 = [[
|
|
|
|
common line
|
|
common line
|
|
|
|
DEFabc
|
|
xyz
|
|
xyz
|
|
xyz
|
|
DEFabc
|
|
DEFabc
|
|
DEFabc
|
|
common line
|
|
common line
|
|
DEF
|
|
common line
|
|
DEF
|
|
something
|
|
]]
|
|
local f2 = [[
|
|
|
|
common line
|
|
common line
|
|
|
|
ABCabc
|
|
ABCabc
|
|
ABCabc
|
|
ABCabc
|
|
common line
|
|
common line
|
|
common line
|
|
something
|
|
]]
|
|
write_file(fname, f1, false)
|
|
write_file(fname_2, f2, false)
|
|
reread()
|
|
end)
|
|
|
|
it('get from window 1 from line 5 to 9', function()
|
|
feed('1<c-w>w')
|
|
feed(':5,9diffget<cr>')
|
|
screen:expect([[
|
|
{7:+ }{8: 1 }{13:^+-- 7 lines: common line··················}│{7:+ }{8: 1 }{13:+-- 7 lines: common line···················}|
|
|
{7: }{8: 8 }xyz │{7: }{8: 8 }xyz |
|
|
{7: }{8: 9 }DEFabc │{7: }{8: 9 }DEFabc |
|
|
{7: }{8: 10 }DEFabc │{7: }{8: 10 }DEFabc |
|
|
{7: }{8: 11 }DEFabc │{7: }{8: 11 }DEFabc |
|
|
{7: }{8: 12 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 13 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 14 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 15 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|*7
|
|
{3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:5,9diffget |
|
|
]])
|
|
end)
|
|
it('get from window 2 from line 5 to 10', function()
|
|
feed('2<c-w>w')
|
|
feed(':5,10diffget<cr>')
|
|
screen:expect([[
|
|
{7:- }{8: 1 } │{7:- }{8: 1 }^ |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }ABCabc │{7: }{8: 5 }ABCabc |
|
|
{7: }{8: 6 }ABCabc │{7: }{8: 6 }ABCabc |
|
|
{7: }{8: 7 }ABCabc │{7: }{8: 7 }ABCabc |
|
|
{7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 8 }{27:DEF}{4:abc }|
|
|
{7: }{8: 9 }common line │{7: }{8: 9 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 10 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 11 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 13 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 14 }something |
|
|
{1:~ }│{1:~ }|*4
|
|
{2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }|
|
|
:5,10diffget |
|
|
]])
|
|
end)
|
|
it('get all from window 2', function()
|
|
feed('2<c-w>w')
|
|
feed(':4,17diffget<cr>')
|
|
screen:expect([[
|
|
{7:+ }{8: 1 }{13:+-- 12 lines: common line··················}│{7:+ }{8: 1 }{13:^+-- 12 lines: common line···················}|
|
|
{1:~ }│{1:~ }|*17
|
|
{2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }|
|
|
:4,17diffget |
|
|
]])
|
|
end)
|
|
it('get all from window 1', function()
|
|
feed('1<c-w>w')
|
|
feed(':4,12diffget<cr>')
|
|
screen:expect([[
|
|
{7:+ }{8: 1 }{13:^+-- 17 lines: common line··················}│{7:+ }{8: 1 }{13:+-- 17 lines: common line···················}|
|
|
{1:~ }│{1:~ }|*17
|
|
{3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:4,12diffget |
|
|
]])
|
|
end)
|
|
it('get from window 1 using do 1 line 5', function()
|
|
feed('1<c-w>w')
|
|
feed('5gg')
|
|
feed('do')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }^DEFabc │{7: }{8: 5 }DEFabc |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('get from window 1 using do 2 line 6', function()
|
|
feed('1<c-w>w')
|
|
feed('6gg')
|
|
feed('do')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }^DEFabc │{7: }{8: 9 }DEFabc |
|
|
{7: }{8: 7 }DEFabc │{7: }{8: 10 }DEFabc |
|
|
{7: }{8: 8 }DEFabc │{7: }{8: 11 }DEFabc |
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('get from window 1 using do 2 line 7', function()
|
|
feed('1<c-w>w')
|
|
feed('7gg')
|
|
feed('do')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }DEFabc │{7: }{8: 9 }DEFabc |
|
|
{7: }{8: 7 }^DEFabc │{7: }{8: 10 }DEFabc |
|
|
{7: }{8: 8 }DEFabc │{7: }{8: 11 }DEFabc |
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('get from window 1 using do 2 line 11', function()
|
|
feed('1<c-w>w')
|
|
feed('11gg')
|
|
feed('do')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: 11 }DEF │{7: }{8: 14 }DEF |
|
|
{7: }{8: 12 }^common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 13 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('get from window 1 using do 2 line 12', function()
|
|
feed('1<c-w>w')
|
|
feed('12gg')
|
|
feed('do')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: 12 }DEF │{7: }{8: 16 }DEF |
|
|
{7: }{8: 13 }^something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 1 using dp 1 line 5', function()
|
|
feed('1<c-w>w')
|
|
feed('5gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }^ABCabc │{7: }{8: 5 }ABCabc |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 1 using dp 2 line 6', function()
|
|
feed('1<c-w>w')
|
|
feed('6gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }^ABCabc │{7: }{8: 9 }ABCabc |
|
|
{7: }{8: 7 }ABCabc │{7: }{8: 10 }ABCabc |
|
|
{7: }{8: 8 }ABCabc │{7: }{8: 11 }ABCabc |
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 1 using dp 2 line 7', function()
|
|
feed('1<c-w>w')
|
|
feed('7gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }ABCabc │{7: }{8: 9 }ABCabc |
|
|
{7: }{8: 7 }^ABCabc │{7: }{8: 10 }ABCabc |
|
|
{7: }{8: 8 }ABCabc │{7: }{8: 11 }ABCabc |
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 1 using dp 2 line 11', function()
|
|
feed('1<c-w>w')
|
|
feed('11gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: 11 }^common line │{7: }{8: 14 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 15 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 16 }something |
|
|
{1:~ }│{1:~ }|
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 1 using dp 2 line 12', function()
|
|
feed('1<c-w>w')
|
|
feed('12gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: 12 }^something │{7: }{8: 16 }something |
|
|
{1:~ }│{1:~ }|
|
|
{1:~ }│{1:~ }|
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 [+] }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 2 using dp line 6', function()
|
|
feed('2<c-w>w')
|
|
feed('6gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: 6 }xyz │{7: }{8: 6 }^xyz |
|
|
{7: }{8: 7 }xyz │{7: }{8: 7 }xyz |
|
|
{7: }{8: 8 }xyz │{7: }{8: 8 }xyz |
|
|
{7: }{8: 9 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 10 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 11 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 12 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 13 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 14 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 15 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{2:Xtest-functional-diff-screen-1.2 [+] }{3:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 2 using dp line 8', function()
|
|
feed('2<c-w>w')
|
|
feed('8gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: 6 }xyz │{7: }{8: 6 }xyz |
|
|
{7: }{8: 7 }xyz │{7: }{8: 7 }xyz |
|
|
{7: }{8: 8 }xyz │{7: }{8: 8 }^xyz |
|
|
{7: }{8: 9 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 10 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 11 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 12 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 13 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 14 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 15 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{2:Xtest-functional-diff-screen-1.2 [+] }{3:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 2 using dp line 9', function()
|
|
feed('2<c-w>w')
|
|
feed('9gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }DEFabc │{7: }{8: 9 }^DEFabc |
|
|
{7: }{8: 7 }DEFabc │{7: }{8: 10 }DEFabc |
|
|
{7: }{8: 8 }DEFabc │{7: }{8: 11 }DEFabc |
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 16 }{22:DEF }|
|
|
{7: }{8: 12 }something │{7: }{8: 17 }something |
|
|
{1:~ }│{1:~ }|
|
|
{2:Xtest-functional-diff-screen-1.2 [+] }{3:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
it('put from window 2 using dp line 17', function()
|
|
feed('2<c-w>w')
|
|
feed('17gg')
|
|
feed('dp')
|
|
screen:expect([[
|
|
{7: }{8: 1 } │{7: }{8: 1 } |
|
|
{7: }{8: 2 }common line │{7: }{8: 2 }common line |
|
|
{7: }{8: 3 }common line │{7: }{8: 3 }common line |
|
|
{7: }{8: 4 } │{7: }{8: 4 } |
|
|
{7: }{8: 5 }{27:ABC}{4:abc }│{7: }{8: 5 }{27:DEF}{4:abc }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 6 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 7 }{22:xyz }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 8 }{22:xyz }|
|
|
{7: }{8: 6 }{27:ABC}{4:abc }│{7: }{8: 9 }{27:DEF}{4:abc }|
|
|
{7: }{8: 7 }{27:ABC}{4:abc }│{7: }{8: 10 }{27:DEF}{4:abc }|
|
|
{7: }{8: 8 }{27:ABC}{4:abc }│{7: }{8: 11 }{27:DEF}{4:abc }|
|
|
{7: }{8: 9 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 10 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 14 }{22:DEF }|
|
|
{7: }{8: 11 }common line │{7: }{8: 15 }common line |
|
|
{7: }{8: 12 }DEF │{7: }{8: 16 }DEF |
|
|
{7: }{8: 13 }something │{7: }{8: 17 }^something |
|
|
{1:~ }│{1:~ }|
|
|
{2:Xtest-functional-diff-screen-1.2 [+] }{3:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
end)
|
|
describe('setup a diff with 2 files and set linematch:30', function()
|
|
before_each(function()
|
|
feed(':set diffopt+=linematch:30<cr>')
|
|
local f1 = [[
|
|
// abc d
|
|
// d
|
|
// d
|
|
]]
|
|
local f2 = [[
|
|
|
|
abc d
|
|
d
|
|
]]
|
|
write_file(fname, f1, false)
|
|
write_file(fname_2, f2, false)
|
|
reread()
|
|
end)
|
|
|
|
it('display results', function()
|
|
screen:expect([[
|
|
{7: }{8: 1 }{22:^ }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 2 }{4:abc d }│{7: }{8: 1 }{27:// }{4:abc d }|
|
|
{7: }{8: 3 }{4:d }│{7: }{8: 2 }{27:// }{4:d }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 3 }{22:// d }|
|
|
{1:~ }│{1:~ }|*14
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
end)
|
|
describe('setup a diff with 2 files and set linematch:30, with ignore white', function()
|
|
before_each(function()
|
|
feed(':set diffopt+=linematch:30<cr>:set diffopt+=iwhiteall<cr>')
|
|
local f1 = [[
|
|
void testFunction () {
|
|
for (int i = 0; i < 10; i++) {
|
|
for (int j = 0; j < 10; j++) {
|
|
}
|
|
}
|
|
}
|
|
]]
|
|
local f2 = [[
|
|
void testFunction () {
|
|
// for (int j = 0; j < 10; i++) {
|
|
// }
|
|
}
|
|
]]
|
|
write_file(fname, f1, false)
|
|
write_file(fname_2, f2, false)
|
|
reread()
|
|
end)
|
|
|
|
it('display results', function()
|
|
screen:expect([[
|
|
{7: }{8: 1 }^void testFunction () { │{7: }{8: 1 }void testFunction () { |
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 2 }{22: for (int i = 0; i < 10; i++) { }|
|
|
{7: }{8: 2 }{4: }{27:// for (int j = 0; j < 10; i}{4:++) { }│{7: }{8: 3 }{4: }{27:for (int j = 0; j < 10; j}{4:++) { }|
|
|
{7: }{8: 3 }{4: }{27:// }{4:} }│{7: }{8: 4 }{4: } }|
|
|
{7: }{8: }{23:-------------------------------------------}│{7: }{8: 5 }{22: } }|
|
|
{7: }{8: 4 }} │{7: }{8: 6 }} |
|
|
{1:~ }│{1:~ }|*12
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
end)
|
|
describe('a diff that would result in multiple groups before grouping optimization', function()
|
|
before_each(function()
|
|
feed(':set diffopt+=linematch:30<cr>')
|
|
local f1 = [[
|
|
!A
|
|
!B
|
|
!C
|
|
]]
|
|
local f2 = [[
|
|
?Z
|
|
?A
|
|
?B
|
|
?C
|
|
?A
|
|
?B
|
|
?B
|
|
?C
|
|
]]
|
|
write_file(fname, f1, false)
|
|
write_file(fname_2, f2, false)
|
|
reread()
|
|
end)
|
|
|
|
it('display results', function()
|
|
screen:expect([[
|
|
{7: }{8: 1 }{22:^?Z }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 2 }{27:?}{4:A }│{7: }{8: 1 }{27:!}{4:A }|
|
|
{7: }{8: 3 }{27:?}{4:B }│{7: }{8: 2 }{27:!}{4:B }|
|
|
{7: }{8: 4 }{27:?}{4:C }│{7: }{8: 3 }{27:!}{4:C }|
|
|
{7: }{8: 5 }{22:?A }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 6 }{22:?B }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 7 }{22:?B }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 8 }{22:?C }│{7: }{8: }{23:--------------------------------------------}|
|
|
{1:~ }│{1:~ }|*10
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
end)
|
|
describe('a diff that would result in multiple groups before grouping optimization', function()
|
|
before_each(function()
|
|
feed(':set diffopt+=linematch:30<cr>')
|
|
local f1 = [[
|
|
!A
|
|
!B
|
|
!C
|
|
]]
|
|
local f2 = [[
|
|
?A
|
|
?Z
|
|
?B
|
|
?C
|
|
?A
|
|
?B
|
|
?C
|
|
?C
|
|
]]
|
|
write_file(fname, f1, false)
|
|
write_file(fname_2, f2, false)
|
|
reread()
|
|
end)
|
|
|
|
it('display results', function()
|
|
screen:expect([[
|
|
{7: }{8: 1 }{22:^?A }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 2 }{22:?Z }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 3 }{22:?B }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 4 }{22:?C }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 5 }{27:?}{4:A }│{7: }{8: 1 }{27:!}{4:A }|
|
|
{7: }{8: 6 }{27:?}{4:B }│{7: }{8: 2 }{27:!}{4:B }|
|
|
{7: }{8: 7 }{27:?}{4:C }│{7: }{8: 3 }{27:!}{4:C }|
|
|
{7: }{8: 8 }{22:?C }│{7: }{8: }{23:--------------------------------------------}|
|
|
{1:~ }│{1:~ }|*10
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
end)
|
|
end)
|
|
describe('setup a diff with 2 files and set linematch:10', function()
|
|
before_each(function()
|
|
feed(':set diffopt+=linematch:10<cr>')
|
|
local f1 = [[
|
|
common line
|
|
HIL
|
|
|
|
aABCabc
|
|
aABCabc
|
|
aABCabc
|
|
aABCabc
|
|
common line
|
|
HIL
|
|
common line
|
|
something
|
|
]]
|
|
local f2 = [[
|
|
common line
|
|
DEF
|
|
GHI
|
|
something
|
|
|
|
aDEFabc
|
|
xyz
|
|
xyz
|
|
xyz
|
|
aDEFabc
|
|
aDEFabc
|
|
aDEFabc
|
|
common line
|
|
DEF
|
|
GHI
|
|
something else
|
|
common line
|
|
something
|
|
]]
|
|
write_file(fname, f1, false)
|
|
write_file(fname_2, f2, false)
|
|
reread()
|
|
end)
|
|
|
|
it(
|
|
'enable linematch for the longest diff block by increasing the number argument passed to linematch',
|
|
function()
|
|
feed('1<c-w>w')
|
|
-- linematch is disabled for the longest diff because it's combined line length is over 10
|
|
screen:expect([[
|
|
{7: }{8: 1 }^common line │{7: }{8: 1 }common line |
|
|
{7: }{8: 2 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 3 }{27:GHI}{4: }│{7: }{8: 2 }{27:HIL}{4: }|
|
|
{7: }{8: 4 }{22:something }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 5 } │{7: }{8: 3 } |
|
|
{7: }{8: 6 }{4:a}{27:DEF}{4:abc }│{7: }{8: 4 }{4:a}{27:ABC}{4:abc }|
|
|
{7: }{8: 7 }{27:xyz}{4: }│{7: }{8: 5 }{27:aABCabc}{4: }|
|
|
{7: }{8: 8 }{27:xyz}{4: }│{7: }{8: 6 }{27:aABCabc}{4: }|
|
|
{7: }{8: 9 }{27:xyz}{4: }│{7: }{8: 7 }{27:aABCabc}{4: }|
|
|
{7: }{8: 10 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 11 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 12 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 13 }common line │{7: }{8: 8 }common line |
|
|
{7: }{8: 14 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 15 }{27:GHI}{4: }│{7: }{8: 9 }{27:HIL}{4: }|
|
|
{7: }{8: 16 }{22:something else }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 17 }common line │{7: }{8: 10 }common line |
|
|
{7: }{8: 18 }something │{7: }{8: 11 }something |
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }|
|
|
:e |
|
|
]])
|
|
-- enable it by increasing the number
|
|
feed(':set diffopt-=linematch:10<cr>')
|
|
feed(':set diffopt+=linematch:30<cr>')
|
|
screen:expect([[
|
|
{7: }{8: 1 }^common line │{7: }{8: 1 }common line |
|
|
{7: }{8: 2 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 3 }{27:GHI}{4: }│{7: }{8: 2 }{27:HIL}{4: }|
|
|
{7: }{8: 4 }{22:something }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 5 } │{7: }{8: 3 } |
|
|
{7: }{8: 6 }{4:a}{27:DEF}{4:abc }│{7: }{8: 4 }{4:a}{27:ABC}{4:abc }|
|
|
{7: }{8: 7 }{22:xyz }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 8 }{22:xyz }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 9 }{22:xyz }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 10 }{4:a}{27:DEF}{4:abc }│{7: }{8: 5 }{4:a}{27:ABC}{4:abc }|
|
|
{7: }{8: 11 }{4:a}{27:DEF}{4:abc }│{7: }{8: 6 }{4:a}{27:ABC}{4:abc }|
|
|
{7: }{8: 12 }{4:a}{27:DEF}{4:abc }│{7: }{8: 7 }{4:a}{27:ABC}{4:abc }|
|
|
{7: }{8: 13 }common line │{7: }{8: 8 }common line |
|
|
{7: }{8: 14 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 15 }{27:GHI}{4: }│{7: }{8: 9 }{27:HIL}{4: }|
|
|
{7: }{8: 16 }{22:something else }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 17 }common line │{7: }{8: 10 }common line |
|
|
{7: }{8: 18 }something │{7: }{8: 11 }something |
|
|
{3:Xtest-functional-diff-screen-1.2 }{2:Xtest-functional-diff-screen-1 }|
|
|
:set diffopt+=linematch:30 |
|
|
]])
|
|
end
|
|
)
|
|
it('get all from second window', function()
|
|
feed('2<c-w>w')
|
|
feed(':1,12diffget<cr>')
|
|
screen:expect([[
|
|
{7:+ }{8: 1 }{13:+-- 18 lines: common line··················}│{7:+ }{8: 1 }{13:^+-- 18 lines: common line···················}|
|
|
{1:~ }│{1:~ }|*17
|
|
{2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }|
|
|
:1,12diffget |
|
|
]])
|
|
end)
|
|
it('get all from first window', function()
|
|
feed('1<c-w>w')
|
|
feed(':1,19diffget<cr>')
|
|
screen:expect([[
|
|
{7:+ }{8: 1 }{13:^+-- 11 lines: common line··················}│{7:+ }{8: 1 }{13:+-- 11 lines: common line···················}|
|
|
{1:~ }│{1:~ }|*17
|
|
{3:Xtest-functional-diff-screen-1.2 [+] }{2:Xtest-functional-diff-screen-1 }|
|
|
:1,19diffget |
|
|
]])
|
|
end)
|
|
it(
|
|
'get part of the non linematched diff block in window 2 line 7 - 8 (non line matched block)',
|
|
function()
|
|
feed('2<c-w>w')
|
|
feed(':7,8diffget<cr>')
|
|
screen:expect([[
|
|
{7: }{8: 1 }common line │{7: }{8: 1 }^common line |
|
|
{7: }{8: 2 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 3 }{27:GHI}{4: }│{7: }{8: 2 }{27:HIL}{4: }|
|
|
{7: }{8: 4 }{22:something }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 5 } │{7: }{8: 3 } |
|
|
{7: }{8: 6 }{4:a}{27:DEF}{4:abc }│{7: }{8: 4 }{4:a}{27:ABC}{4:abc }|
|
|
{7: }{8: 7 }{27:xyz}{4: }│{7: }{8: 5 }{27:aABCabc}{4: }|
|
|
{7: }{8: 8 }{27:xyz}{4: }│{7: }{8: 6 }{27:aABCabc}{4: }|
|
|
{7: }{8: 9 }xyz │{7: }{8: 7 }xyz |
|
|
{7: }{8: 10 }aDEFabc │{7: }{8: 8 }aDEFabc |
|
|
{7: }{8: 11 }aDEFabc │{7: }{8: 9 }aDEFabc |
|
|
{7: }{8: 12 }aDEFabc │{7: }{8: 10 }aDEFabc |
|
|
{7: }{8: 13 }common line │{7: }{8: 11 }common line |
|
|
{7: }{8: 14 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 15 }{27:GHI}{4: }│{7: }{8: 12 }{27:HIL}{4: }|
|
|
{7: }{8: 16 }{22:something else }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 17 }common line │{7: }{8: 13 }common line |
|
|
{7: }{8: 18 }something │{7: }{8: 14 }something |
|
|
{2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }|
|
|
:7,8diffget |
|
|
]])
|
|
end
|
|
)
|
|
it(
|
|
'get part of the non linematched diff block in window 2 line 8 - 10 (line matched block)',
|
|
function()
|
|
feed('2<c-w>w')
|
|
feed(':8,10diffget<cr>')
|
|
screen:expect([[
|
|
{7: }{8: 1 }common line │{7: }{8: 1 }^common line |
|
|
{7: }{8: 2 }{22:DEF }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 3 }{27:GHI}{4: }│{7: }{8: 2 }{27:HIL}{4: }|
|
|
{7: }{8: 4 }{22:something }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 5 } │{7: }{8: 3 } |
|
|
{7: }{8: 6 }{4:a}{27:DEF}{4:abc }│{7: }{8: 4 }{4:a}{27:ABC}{4:abc }|
|
|
{7: }{8: 7 }{27:xyz}{4: }│{7: }{8: 5 }{27:aABCabc}{4: }|
|
|
{7: }{8: 8 }{27:xyz}{4: }│{7: }{8: 6 }{27:aABCabc}{4: }|
|
|
{7: }{8: 9 }{27:xyz}{4: }│{7: }{8: 7 }{27:aABCabc}{4: }|
|
|
{7: }{8: 10 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 11 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 12 }{22:aDEFabc }│{7: }{8: }{23:--------------------------------------------}|
|
|
{7: }{8: 13 }common line │{7: }{8: 8 }common line |
|
|
{7: }{8: 14 }DEF │{7: }{8: 9 }DEF |
|
|
{7: }{8: 15 }GHI │{7: }{8: 10 }GHI |
|
|
{7: }{8: 16 }something else │{7: }{8: 11 }something else |
|
|
{7: }{8: 17 }common line │{7: }{8: 12 }common line |
|
|
{7: }{8: 18 }something │{7: }{8: 13 }something |
|
|
{2:Xtest-functional-diff-screen-1.2 }{3:Xtest-functional-diff-screen-1 [+] }|
|
|
:8,10diffget |
|
|
]])
|
|
end
|
|
)
|
|
end)
|
|
end)
|
|
|
|
describe('regressions', function()
|
|
local screen
|
|
|
|
it("doesn't crash with long lines", function()
|
|
clear()
|
|
feed(':set diffopt+=linematch:30<cr>')
|
|
screen = Screen.new(100, 20)
|
|
-- line must be greater than MATCH_CHAR_MAX_LEN
|
|
n.api.nvim_buf_set_lines(0, 0, -1, false, { string.rep('a', 1000) .. 'hello' })
|
|
n.exec 'vnew'
|
|
n.api.nvim_buf_set_lines(0, 0, -1, false, { string.rep('a', 1010) .. 'world' })
|
|
n.exec 'windo diffthis'
|
|
end)
|
|
|
|
it('properly computes filler lines for hunks bigger than linematch limit', function()
|
|
clear()
|
|
feed(':set diffopt+=linematch:10<cr>')
|
|
screen = Screen.new(100, 20)
|
|
local lines = {}
|
|
for i = 0, 29 do
|
|
lines[#lines + 1] = tostring(i)
|
|
end
|
|
n.api.nvim_buf_set_lines(0, 0, -1, false, lines)
|
|
n.exec 'vnew'
|
|
n.api.nvim_buf_set_lines(0, 0, -1, false, { '00', '29' })
|
|
n.exec 'windo diffthis'
|
|
feed('<C-e>')
|
|
screen:expect {
|
|
grid = [[
|
|
{1: }{2:------------------------------------------------}│{1: }{3:^1 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:2 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:3 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:4 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:5 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:6 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:7 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:8 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:9 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:10 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:11 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:12 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:13 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:14 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:15 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:16 }|
|
|
{1: }{2:------------------------------------------------}│{1: }{3:17 }|
|
|
{1: }29 │{1: }{3:18 }|
|
|
{4:[No Name] [+] }{5:[No Name] [+] }|
|
|
|
|
|
]],
|
|
attr_ids = {
|
|
[1] = { foreground = Screen.colors.DarkBlue, background = Screen.colors.Grey },
|
|
[2] = {
|
|
bold = true,
|
|
background = Screen.colors.LightCyan,
|
|
foreground = Screen.colors.Blue1,
|
|
},
|
|
[3] = { background = Screen.colors.LightBlue },
|
|
[4] = { reverse = true },
|
|
[5] = { reverse = true, bold = true },
|
|
},
|
|
}
|
|
end)
|
|
|
|
-- oldtest: Test_linematch_3diffs_sanity_check()
|
|
it('sanity check with 3 diff buffers', function()
|
|
clear()
|
|
screen = Screen.new(75, 20)
|
|
n.api.nvim_buf_set_lines(0, 0, -1, false, { 'abcd', 'def', 'hij' })
|
|
n.exec('rightbelow vnew')
|
|
n.api.nvim_buf_set_lines(0, 0, -1, false, { 'defq', 'hijk', 'nopq' })
|
|
n.exec('rightbelow vnew')
|
|
n.api.nvim_buf_set_lines(0, 0, -1, false, { 'hijklm', 'nopqr', 'stuv' })
|
|
n.exec([[
|
|
set diffopt+=linematch:60
|
|
windo diffthis | wincmd t
|
|
call feedkeys("Aq\<esc>")
|
|
call feedkeys("GAklm\<esc>")
|
|
call feedkeys("o")
|
|
]])
|
|
screen:expect([[
|
|
{7: }{22:abcdq }│{7: }{23:----------------------}│{7: }{23:-----------------------}|
|
|
{7: }{4:def }│{7: }{4:def}{27:q}{4: }│{7: }{23:-----------------------}|
|
|
{7: }{4:hijk}{27:lm}{4: }│{7: }{4:hijk }│{7: }{4:hijk}{27:lm}{4: }|
|
|
{7: }{23:----------------------}│{7: }{4:nopq }│{7: }{4:nopq}{27:r}{4: }|
|
|
{7: }{4:^ }│{7: }{23:----------------------}│{7: }{27:stuv}{4: }|
|
|
{1:~ }│{1:~ }│{1:~ }|*13
|
|
{3:[No Name] [+] }{2:[No Name] [+] [No Name] [+] }|
|
|
{5:-- INSERT --} |
|
|
]])
|
|
end)
|
|
end)
|