diff options
-rw-r--r-- | src/nvim/diff.c | 6 | ||||
-rw-r--r-- | test/functional/ui/diff_spec.lua | 28 | ||||
-rw-r--r-- | test/functional/ui/highlight_spec.lua | 6 | ||||
-rw-r--r-- | test/old/testdir/test_diffmode.vim | 10 |
4 files changed, 46 insertions, 4 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c index 7096c5fa8a..0c59b8eb67 100644 --- a/src/nvim/diff.c +++ b/src/nvim/diff.c @@ -736,6 +736,12 @@ static void clear_diffout(diffout_T *dout) /// @return FAIL for failure. static int diff_write_buffer(buf_T *buf, mmfile_t *m, linenr_T start, linenr_T end) { + if (buf->b_ml.ml_flags & ML_EMPTY) { + m->ptr = NULL; + m->size = 0; + return OK; + } + size_t len = 0; if (end < 0) { diff --git a/test/functional/ui/diff_spec.lua b/test/functional/ui/diff_spec.lua index bad35dd2af..8db6f776d1 100644 --- a/test/functional/ui/diff_spec.lua +++ b/test/functional/ui/diff_spec.lua @@ -614,6 +614,34 @@ int main(int argc, char **argv) ]]) end) + it('Diff empty and non-empty file', function() + write_file(fname, '', false) + write_file(fname_2, 'foo\nbar\nbaz', false) + reread() + + feed(':set diffopt=filler<cr>') + screen:expect([[ + {7: }{23:------------------}│{7: }{22:foo }| + {7: }{23:------------------}│{7: }{22:bar }| + {7: }{23:------------------}│{7: }{22:baz }| + {7: }^ │{1:~ }| + {1:~ }│{1:~ }|*10 + {3:<onal-diff-screen-1 }{2:<l-diff-screen-1.2 }| + :set diffopt=filler | + ]]) + + feed(':set diffopt+=internal<cr>') + screen:expect([[ + {7: }{23:------------------}│{7: }{22:foo }| + {7: }{23:------------------}│{7: }{22:bar }| + {7: }{23:------------------}│{7: }{22:baz }| + {7: }^ │{1:~ }| + {1:~ }│{1:~ }|*10 + {3:<onal-diff-screen-1 }{2:<l-diff-screen-1.2 }| + :set diffopt+=internal | + ]]) + end) + it('diffopt+=icase', function() write_file(fname, 'a\nb\ncd\n', false) write_file(fname_2, 'A\nb\ncDe\n', false) diff --git a/test/functional/ui/highlight_spec.lua b/test/functional/ui/highlight_spec.lua index 277bd96bd8..87d66fa604 100644 --- a/test/functional/ui/highlight_spec.lua +++ b/test/functional/ui/highlight_spec.lua @@ -596,13 +596,13 @@ describe('highlight', function() ]]) screen:expect( [[ - {1: }^ | + {1: }{5:^ }| {1: }{2:01}{3:234 67}{2:89}{5: }| {4:~ }|*2 {7:[No Name] [+] }| - {1: } | {1: }{6:-----------------------}| - {4:~ }| + {1: }{6:-----------------------}| + {1: } | {8:[No Name] }| | ]], diff --git a/test/old/testdir/test_diffmode.vim b/test/old/testdir/test_diffmode.vim index 31d66ebc4a..84cb7eb376 100644 --- a/test/old/testdir/test_diffmode.vim +++ b/test/old/testdir/test_diffmode.vim @@ -997,9 +997,17 @@ func Test_diff_screen() call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar']) call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol") - " Test 19: test diffopt+=iwhiteall + " Test 20: test diffopt+=iwhiteall call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall") + " Test 21: Delete all lines + call WriteDiffFiles(buf, [0], []) + call VerifyBoth(buf, "Test_diff_21", "") + + " Test 22: Add line to empty file + call WriteDiffFiles(buf, [], [0]) + call VerifyBoth(buf, "Test_diff_22", "") + " clean up call StopVimInTerminal(buf) call delete('Xdifile1') |