vim-patch:9.1.0743: diff mode does not handle overlapping diffs correctly (#30532)

Problem:  diff mode does not handle overlapping diffs correctly
Solution: correct the logic to handle overlapping blocks
          (Yukihiro Nakadaira)

Vim merges overlapped diff blocks and it doesn't work expectedly
in some situation.

closes: vim/vim#15735

06fe70c183

Co-authored-by: Yukihiro Nakadaira <yukihiro.nakadaira@gmail.com>
This commit is contained in:
zeertzjq
2024-09-27 15:14:39 +08:00
committed by GitHub
parent a9287dd882
commit 6f2fe8a791
3 changed files with 751 additions and 10 deletions

View File

@@ -12,6 +12,19 @@ local exec = n.exec
local eq = t.eq
local api = n.api
local function WriteDiffFiles(text1, text2)
write_file('Xdifile1', text1)
write_file('Xdifile2', text2)
command('checktime')
end
local function WriteDiffFiles3(text1, text2, text3)
write_file('Xdifile1', text1)
write_file('Xdifile2', text2)
write_file('Xdifile3', text3)
command('checktime')
end
before_each(clear)
describe('Diff mode screen', function()
@@ -1515,3 +1528,529 @@ it("diff mode draws 'breakindent' correctly after filler lines", function()
|
]])
end)
-- oldtest: Test_diff_overlapped_diff_blocks_will_be_merged()
it('diff mode overlapped diff blocks will be merged', function()
write_file('Xdifile1', '')
write_file('Xdifile2', '')
write_file('Xdifile3', '')
finally(function()
os.remove('Xdifile1')
os.remove('Xdifile2')
os.remove('Xdifile3')
os.remove('Xdiin1')
os.remove('Xdinew1')
os.remove('Xdiout1')
os.remove('Xdiin2')
os.remove('Xdinew2')
os.remove('Xdiout2')
end)
exec([[
func DiffExprStub()
let txt_in = readfile(v:fname_in)
let txt_new = readfile(v:fname_new)
if txt_in == ["line1"] && txt_new == ["line2"]
call writefile(["1c1"], v:fname_out)
elseif txt_in == readfile("Xdiin1") && txt_new == readfile("Xdinew1")
call writefile(readfile("Xdiout1"), v:fname_out)
elseif txt_in == readfile("Xdiin2") && txt_new == readfile("Xdinew2")
call writefile(readfile("Xdiout2"), v:fname_out)
endif
endfunc
]])
local screen = Screen.new(35, 20)
screen:attach()
command('set winwidth=10 diffopt=filler,internal')
command('args Xdifile1 Xdifile2 | vert all | windo diffthis')
WriteDiffFiles('a\nb', 'x\nx')
write_file('Xdiin1', 'a\nb')
write_file('Xdinew1', 'x\nx')
write_file('Xdiout1', '1c1\n2c2')
command('set diffexpr=DiffExprStub()')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:^x}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }|
{1:~ }│{1:~ }|*16
{2:Xdifile1 }{3:Xdifile2 }|
|
]])
command('set diffexpr&')
WriteDiffFiles('a\nb\nc', 'x\nc')
write_file('Xdiin1', 'a\nb\nc')
write_file('Xdinew1', 'x\nc')
write_file('Xdiout1', '1c1\n2c1')
command('set diffexpr=DiffExprStub()')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:^x}{4: }|
{7: }{22:b }│{7: }{23:---------------}|
{7: }c │{7: }c |
{1:~ }│{1:~ }|*15
{2:Xdifile1 }{3:Xdifile2 }|
|
]])
command('set diffexpr&')
WriteDiffFiles('a\nc', 'x\nx\nc')
write_file('Xdiin1', 'a\nc')
write_file('Xdinew1', 'x\nx\nc')
write_file('Xdiout1', '1c1\n1a2')
command('set diffexpr=DiffExprStub()')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:^x}{4: }|
{7: }{23:---------------}│{7: }{22:x }|
{7: }c │{7: }c |
{1:~ }│{1:~ }|*15
{2:Xdifile1 }{3:Xdifile2 }|
|
]])
command('set diffexpr&')
command('args Xdifile1 Xdifile2 Xdifile3 | vert all | windo diffthis')
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'y\nb\nc')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }c │{7: }c │{7: }c |
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'a\ny\nc')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }c │{7: }c │{7: }c |
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'a\nb\ny')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'y\ny\nc')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }c │{7: }c │{7: }c |
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'a\ny\ny')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'y\ny\ny')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nx', 'y\ny\nc')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:x}{4: }│{7: }{27:c}{4: }|
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'x\nx\nc', 'a\ny\ny')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:x}{4: }│{7: }{27:^a}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'y\ny\ny\nd\ne')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:d}{4: }|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'y\ny\ny\ny\ne')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'y\ny\ny\ny\ny')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:e}{4: }│{7: }{27:e}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\ny\ny\nd\ne')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:d}{4: }|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\ny\ny\ny\ne')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\ny\ny\ny\ny')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:e}{4: }│{7: }{27:e}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\nb\ny\nd\ne')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:d}{4: }|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\nb\ny\ny\ne')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\nb\ny\ny\ny')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:e}{4: }│{7: }{27:e}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb', 'x\nb', 'y\ny')
write_file('Xdiin1', 'a\nb')
write_file('Xdinew1', 'x\nb')
write_file('Xdiout1', '1c1')
write_file('Xdiin2', 'a\nb')
write_file('Xdinew2', 'y\ny')
write_file('Xdiout2', '1c1\n2c2')
command('set diffexpr=DiffExprStub()')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:x}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:b}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*16
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
command('set diffexpr&')
WriteDiffFiles3('a\nb\nc\nd', 'x\nb\nx\nd', 'y\ny\nc\nd')
write_file('Xdiin1', 'a\nb\nc\nd')
write_file('Xdinew1', 'x\nb\nx\nd')
write_file('Xdiout1', '1c1\n3c3')
write_file('Xdiin2', 'a\nb\nc\nd')
write_file('Xdinew2', 'y\ny\nc\nd')
write_file('Xdiout2', '1c1\n2c2')
command('set diffexpr=DiffExprStub()')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:x}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:b}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:x}{4: }│{7: }{27:c}{4: }|
{7: }d │{7: }d │{7: }d |
{1:~ }│{1:~ }│{1:~ }|*14
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
command('set diffexpr&')
WriteDiffFiles3('a\nb\nc\nd', 'x\nb\nx\nd', 'y\ny\ny\nd')
write_file('Xdiin1', 'a\nb\nc\nd')
write_file('Xdinew1', 'x\nb\nx\nd')
write_file('Xdiout1', '1c1\n3c3')
write_file('Xdiin2', 'a\nb\nc\nd')
write_file('Xdinew2', 'y\ny\ny\nd')
write_file('Xdiout2', '1c1\n2,3c2,3')
command('set diffexpr=DiffExprStub()')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:x}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:b}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }d │{7: }d │{7: }d |
{1:~ }│{1:~ }│{1:~ }|*14
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
command('set diffexpr&')
WriteDiffFiles3('a\nb\nc\nd', 'x\nb\nx\nd', 'y\ny\ny\ny')
write_file('Xdiin1', 'a\nb\nc\nd')
write_file('Xdinew1', 'x\nb\nx\nd')
write_file('Xdiout1', '1c1\n3c3')
write_file('Xdiin2', 'a\nb\nc\nd')
write_file('Xdinew2', 'y\ny\ny\ny')
write_file('Xdiout2', '1c1\n2,4c2,4')
command('set diffexpr=DiffExprStub()')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:x}{4: }│{7: }{27:^y}{4: }|
{7: }{27:b}{4: }│{7: }{27:b}{4: }│{7: }{27:y}{4: }|
{7: }{27:c}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{27:d}{4: }│{7: }{27:d}{4: }│{7: }{27:y}{4: }|
{1:~ }│{1:~ }│{1:~ }|*14
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
command('set diffexpr&')
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'b\nc')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^b}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }c │{7: }c │{7: }c |
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'c')
screen:expect([[
{7: }{4:a }│{7: }{4:a }│{7: }{23:---------}|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }c │{7: }c │{7: }^c |
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', '')
screen:expect([[
{7: }{4:a }│{7: }{4:a }│{7: }{23:---------}|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{1:~ }│{1:~ }│{7: }^ |
{1:~ }│{1:~ }│{1:~ }|*14
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'a\nc')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }c │{7: }c │{7: }c |
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'a')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'b')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^b}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{1:~ }│{1:~ }│{1:~ }|*15
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'd\ne')
screen:expect([[
{7: }{27:a}{4: }│{7: }{27:a}{4: }│{7: }{27:^d}{4: }|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'e')
screen:expect([[
{7: }{4:a }│{7: }{4:a }│{7: }{23:---------}|
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }e │{7: }e │{7: }^e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\nd\ne')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:d}{4: }|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\ne')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:e }│{7: }{4:e }│{7: }{23:---------}|
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\nb\nd\ne')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }{27:c}{4: }│{7: }{27:c}{4: }│{7: }{27:d}{4: }|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\nb\ne')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }e │{7: }e │{7: }e |
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc\nd\ne', 'a\nx\nc\nx\ne', 'a\nb')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }{4:c }│{7: }{4:c }│{7: }{23:---------}|
{7: }{27:d}{4: }│{7: }{27:x}{4: }│{7: }{23:---------}|
{7: }{4:e }│{7: }{4:e }│{7: }{23:---------}|
{1:~ }│{1:~ }│{1:~ }|*13
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'a\ny\nb\nc')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:y}{4: }|
{7: }{23:---------}│{7: }{23:---------}│{7: }{22:b }|
{7: }c │{7: }c │{7: }c |
{1:~ }│{1:~ }│{1:~ }|*14
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
WriteDiffFiles3('a\nb\nc', 'a\nx\nc', 'a\nb\ny\nc')
screen:expect([[
{7: }a │{7: }a │{7: }^a |
{7: }{27:b}{4: }│{7: }{27:x}{4: }│{7: }{27:b}{4: }|
{7: }{23:---------}│{7: }{23:---------}│{7: }{22:y }|
{7: }c │{7: }c │{7: }c |
{1:~ }│{1:~ }│{1:~ }|*14
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
]])
end)