aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui/diff_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/ui/diff_spec.lua')
-rw-r--r--test/functional/ui/diff_spec.lua179
1 files changed, 156 insertions, 23 deletions
diff --git a/test/functional/ui/diff_spec.lua b/test/functional/ui/diff_spec.lua
index 13949b0756..6f67dea2be 100644
--- a/test/functional/ui/diff_spec.lua
+++ b/test/functional/ui/diff_spec.lua
@@ -6,7 +6,7 @@ local clear = helpers.clear
local command = helpers.command
local insert = helpers.insert
local write_file = helpers.write_file
-local source = helpers.source
+local exec = helpers.exec
describe('Diff mode screen', function()
local fname = 'Xtest-functional-diff-screen-1'
@@ -186,6 +186,19 @@ describe('Diff mode screen', function()
{7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }|
:set diffopt+=internal |
]])
+
+ screen:try_resize(40, 9)
+ screen:expect([[
+ {1:+ }{5:^+-- 4 lines: 1···}{3:│}{1:+ }{5:+-- 4 lines: 1··}|
+ {1: }5 {3:│}{1: }5 |
+ {1: }6 {3:│}{1: }6 |
+ {1: }7 {3:│}{1: }7 |
+ {1: }8 {3:│}{1: }8 |
+ {1: }9 {3:│}{1: }9 |
+ {1: }10 {3:│}{1: }10 |
+ {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }|
+ |
+ ]])
end)
it('Add a line at the end of file 1', function()
@@ -232,6 +245,19 @@ describe('Diff mode screen', function()
{7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }|
:set diffopt+=internal |
]])
+
+ screen:try_resize(40, 9)
+ screen:expect([[
+ {1:+ }{5:^+-- 4 lines: 1···}{3:│}{1:+ }{5:+-- 4 lines: 1··}|
+ {1: }5 {3:│}{1: }5 |
+ {1: }6 {3:│}{1: }6 |
+ {1: }7 {3:│}{1: }7 |
+ {1: }8 {3:│}{1: }8 |
+ {1: }9 {3:│}{1: }9 |
+ {1: }10 {3:│}{1: }10 |
+ {7:<onal-diff-screen-1 }{3:<l-diff-screen-1.2 }|
+ |
+ ]])
end)
it('Add a line in the middle of file 2, remove on at the end of file 1', function()
@@ -1049,10 +1075,8 @@ it('diff updates line numbers below filler lines', function()
[9] = {background = Screen.colors.LightMagenta},
[10] = {bold = true, foreground = Screen.colors.Brown},
[11] = {foreground = Screen.colors.Brown},
- [12] = {foreground = Screen.colors.Brown, bold = true, background = Screen.colors.Red};
- [13] = {background = Screen.colors.Gray90};
})
- source([[
+ exec([[
call setline(1, ['a', 'a', 'a', 'y', 'b', 'b', 'b', 'b', 'b'])
vnew
call setline(1, ['a', 'a', 'a', 'x', 'x', 'x', 'b', 'b', 'b', 'b', 'b'])
@@ -1109,24 +1133,6 @@ it('diff updates line numbers below filler lines', function()
{3:[No Name] [+] }{7:[No Name] [+] }|
|
]])
- command("set signcolumn number tgc cursorline cursorlineopt=number,line")
- command("hi CursorLineNr guibg=red")
- screen:expect{grid=[[
- {1: }a {3:│}{11: 2 }a |
- {1: }a {3:│}{11: 1 }a |
- {1: }a {3:│}{12:3 }{13:^a }|
- {1: }{8:x}{9: }{3:│}{11: 1 }{8:y}{9: }|
- {1: }{4:x }{3:│}{11: }{2:----------------}|
- {1: }{4:x }{3:│}{11: }{2:----------------}|
- {1: }b {3:│}{11: 2 }b |
- {1: }b {3:│}{11: 3 }b |
- {1: }b {3:│}{11: 4 }b |
- {1: }b {3:│}{11: 5 }b |
- {1: }b {3:│}{11: 6 }b |
- {6:~ }{3:│}{6:~ }|
- {3:[No Name] [+] }{7:[No Name] [+] }|
- signcolumn=auto |
- ]]}
end)
it('Align the filler lines when changing text in diff mode', function()
@@ -1143,7 +1149,7 @@ it('Align the filler lines when changing text in diff mode', function()
[7] = {foreground = Screen.colors.Blue1, bold = true};
[8] = {reverse = true, bold = true};
})
- source([[
+ exec([[
call setline(1, range(1, 15))
vnew
call setline(1, range(9, 15))
@@ -1220,3 +1226,130 @@ it('Align the filler lines when changing text in diff mode', function()
|
]]}
end)
+
+it('diff mode works properly if file contains NUL bytes vim-patch:8.2.3925', function()
+ clear()
+ local screen = Screen.new(40, 20)
+ screen:set_default_attr_ids({
+ [1] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.Gray};
+ [2] = {reverse = true};
+ [3] = {background = Screen.colors.LightBlue};
+ [4] = {background = Screen.colors.LightMagenta};
+ [5] = {background = Screen.colors.Red, bold = true};
+ [6] = {foreground = Screen.colors.Blue, bold = true};
+ [7] = {background = Screen.colors.Red, foreground = Screen.colors.Blue, bold = true};
+ [8] = {reverse = true, bold = true};
+ })
+ screen:attach()
+ exec([[
+ call setline(1, ['a', 'b', "c\n", 'd', 'e', 'f', 'g'])
+ vnew
+ call setline(1, ['A', 'b', 'c', 'd', 'E', 'f', 'g'])
+ windo diffthis
+ wincmd p
+ norm! gg0
+ redraw!
+ ]])
+
+ -- Test using internal diff
+ screen:expect([[
+ {1: }{5:^A}{4: }{2:│}{1: }{5:a}{4: }|
+ {1: }b {2:│}{1: }b |
+ {1: }{4:c }{2:│}{1: }{4:c}{7:^@}{4: }|
+ {1: }d {2:│}{1: }d |
+ {1: }{5:E}{4: }{2:│}{1: }{5:e}{4: }|
+ {1: }f {2:│}{1: }f |
+ {1: }g {2:│}{1: }g |
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {8:[No Name] [+] }{2:[No Name] [+] }|
+ |
+ ]])
+
+ -- Test using internal diff and case folding
+ command('set diffopt+=icase')
+ feed('<C-L>')
+ screen:expect([[
+ {1: }^A {2:│}{1: }a |
+ {1: }b {2:│}{1: }b |
+ {1: }{4:c }{2:│}{1: }{4:c}{7:^@}{4: }|
+ {1: }d {2:│}{1: }d |
+ {1: }E {2:│}{1: }e |
+ {1: }f {2:│}{1: }f |
+ {1: }g {2:│}{1: }g |
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {8:[No Name] [+] }{2:[No Name] [+] }|
+ |
+ ]])
+
+ -- Test using external diff
+ command('set diffopt=filler')
+ feed('<C-L>')
+ screen:expect([[
+ {1: }{5:^A}{4: }{2:│}{1: }{5:a}{4: }|
+ {1: }b {2:│}{1: }b |
+ {1: }{4:c }{2:│}{1: }{4:c}{7:^@}{4: }|
+ {1: }d {2:│}{1: }d |
+ {1: }{5:E}{4: }{2:│}{1: }{5:e}{4: }|
+ {1: }f {2:│}{1: }f |
+ {1: }g {2:│}{1: }g |
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {8:[No Name] [+] }{2:[No Name] [+] }|
+ |
+ ]])
+
+ -- Test using external diff and case folding
+ command('set diffopt+=filler,icase')
+ feed('<C-L>')
+ screen:expect([[
+ {1: }^A {2:│}{1: }a |
+ {1: }b {2:│}{1: }b |
+ {1: }{4:c }{2:│}{1: }{4:c}{7:^@}{4: }|
+ {1: }d {2:│}{1: }d |
+ {1: }E {2:│}{1: }e |
+ {1: }f {2:│}{1: }f |
+ {1: }g {2:│}{1: }g |
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {6:~ }{2:│}{6:~ }|
+ {8:[No Name] [+] }{2:[No Name] [+] }|
+ |
+ ]])
+end)